תרגיל ב-#C
מנהלים: kabanist, Sir Psycho Sexy
סעיף ב' זה די המימוש הפשוט, התכוונתי לייעל על גבי זה.
לגבי א', לא חסכת שם חלוקות כ"כ, מודולו הוא לא יותר יקר מחילוק הוא יקר כמו חילוק, וחילוק זה יקר. במקרים המיוחדים אפשר להמנע לגמרי מפעולות חילוק.
לגבי א', לא חסכת שם חלוקות כ"כ, מודולו הוא לא יותר יקר מחילוק הוא יקר כמו חילוק, וחילוק זה יקר. במקרים המיוחדים אפשר להמנע לגמרי מפעולות חילוק.
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.
-
- TimeShifted Banana
- הודעות: 3479
- הצטרף: 17/1/2004 , 20:48
- מיקום: אביחיל(עמק חפר)
- אמר/ה תודה: 0
- קיבל תודה: 0
- יצירת קשר:
אני לא יודע אם זה יקר (אני אפילו מאמין שכן) אבל תמיד אפשר להפוך את זה לסטרינג(עדיף לקלוט בסטרינג), לעשות מצביע שיצביע על כל תו בסטרינג ויכניס את את המספר (אסקי+48, אם אני זוכר בערך מהתיכון) לסכום, ככה הלולאה גם לא צריכה לחלק, אלא רק לקדם את המצביע עד שהוא מגיע לסוף הסטרינג...
Sir Psycho Sexy כתב: אני ממליץ לך לטוס להודו, בטוח גדל שם משהו שיכול להפוך אותך בחזרה לילד נורמלי.
-
- Dead On Craft
- הודעות: 979
- הצטרף: 14/12/2007 , 17:36
- מיקום: תל אביב
- אמר/ה תודה: 0
- קיבל תודה: 0
רעיון נחמד, אפילו לא צריך ascii, פשוט parse לתו.Banuni כתב:אני לא יודע אם זה יקר (אני אפילו מאמין שכן) אבל תמיד אפשר להפוך את זה לסטרינג(עדיף לקלוט בסטרינג), לעשות מצביע שיצביע על כל תו בסטרינג ויכניס את את המספר (אסקי+48, אם אני זוכר בערך מהתיכון) לסכום, ככה הלולאה גם לא צריכה לחלק, אלא רק לקדם את המצביע עד שהוא מגיע לסוף הסטרינג...
kabanist כתב:אתה נוהג בזמנך הפנוי לקרוא את דפי זהב? אם כן, אל תספר לי את הסוף!
ביטים זה אכן הכיוון הנכון לסעיף א'.
ב' לא קשור לא' בשום צורה.
ב' לא קשור לא' בשום צורה.
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.
טוב, הרגתי אתכם. בואו ננסה משהו אחר: כתבו תוכנית שמקבלת מספר בין 0 ל999 ומחזירה את סכום הספרות שלו. בתוכנית אסור להשתמש בפעולות חשבוניות בכלל.
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.
-
- Dead On Craft
- הודעות: 979
- הצטרף: 14/12/2007 , 17:36
- מיקום: תל אביב
- אמר/ה תודה: 0
- קיבל תודה: 0
אפילו מ-0 עד 999 , מה שאני מתקשה בו זה במעבר מבינארית לדצימלית, כי אין לי הפרדה ברורה בין הספרות הדצימליות בייצוג בינארי. קשה לי לראות איך אני מחשב כמה יש בכל ספרה דצימלית בלי לספור את כל המספר מחדש שזה דבר יקר.
ניסיתי לבדוק חוקיות בסכומים (ויש) אבל גם פה אני לא רואה איך אפשר להעזר בזה בלי לספור את כל המספר מחדש.
אני מרגיש שאני מפספס פה משהו...
אם אתה מתכוון למערך שיכיל את הסכומים של הספרות ואז פשוט sum[n][size=0]a[/size] מכיל את סכום הספרות של n - זה עובד... אבל זה יכול להיות יקר במשאבים שזה תופס... בייחוד כשננסה להמיר את זה למשהו שעובד עם כמות גדולה יותר של ספרות שלא לדבר על להכין את הטבלה הזו מראש בשביל המספרים האלה.
ניסיתי לבדוק חוקיות בסכומים (ויש) אבל גם פה אני לא רואה איך אפשר להעזר בזה בלי לספור את כל המספר מחדש.
אני מרגיש שאני מפספס פה משהו...
אם אתה מתכוון למערך של מספרים כך שכל איבר יכיל ספרה - כנראה שלא, כי אחרת מה הפואנטה לאסור קליטה של תו תו (מה שהוצע מקודם)? זה אותו דבר בערך.מותר להשתמש ב-sum של מערך מספרים?
אם אתה מתכוון למערך שיכיל את הסכומים של הספרות ואז פשוט sum[n][size=0]a[/size] מכיל את סכום הספרות של n - זה עובד... אבל זה יכול להיות יקר במשאבים שזה תופס... בייחוד כשננסה להמיר את זה למשהו שעובד עם כמות גדולה יותר של ספרות שלא לדבר על להכין את הטבלה הזו מראש בשביל המספרים האלה.
האופציה האחרונה ששמואל ציין היא מה שחשבתי עליו. מערך עם אלף כניסות שכל אחת מכילה סכום שחסום ב27 = 1000 בתים של זכרון = כלום.
חמושים בידע הזה, עכשיו סעיף ב' אמור להיות קל מאד.
חמושים בידע הזה, עכשיו סעיף ב' אמור להיות קל מאד.
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.
-
- Dead On Craft
- הודעות: 979
- הצטרף: 14/12/2007 , 17:36
- מיקום: תל אביב
- אמר/ה תודה: 0
- קיבל תודה: 0
מה סכום הספרות המקסימלי של מספר בין 0 ל999?
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.
מגניב. אז לגבי ב' אם חושבים על זה באופן ישיר זה:
קוד: בחירת הכל
// divMod( int number , int divider ,int &div ,int &mod )
const short SUM_3_DIGITS[] =
[
// ... digit sums for numbers 0 up to 999
];
int n=123456789;
int mod = 0;
int sum = 0;
while ( n > 0 )
{
divMod( n , 1000 , n, mod );
sum += SUM_3_DIGITS[mod];
}
כן. ולמעשה אתה יכול להמשיך באותו אופן ולבנות מערך עד 9999 או 99999, ובכל פעם להקריב קצת יותר זכרון בשביל פחות ופחות איטרציות לולאה.
נא לא לשלוח לי יותר מה"פ אחת בכל פעם. לפני השליחה, מומלץ לעיין בחוקי הפורום ובשיטת האימות אם עוד לא קראתם אותם.