עבור לתוכן

שאלה ברקורסיה

Featured Replies

פורסם

אני אמור לרשום פונקציה שמקבלת מספר מסויים בין כמה ספרות ועוד ספרה בודדת ולהחזיר מספר שמורכב מכל הספרות מהמספר המקורי שגדולות או שוות לספרה לדוגמא:

אני מקבל את המספר 12345 ואת הספר 3 אז הפונקציה תחזיר 345.

זה מה שכתבתי:

        public static int filter(int num, int d)        {
int[] arr = new int[howManyDigits(num)];
return filter(num, d, arr, 0);
}


private static int filter(int num, int d, int[] arr, int i)
{
if (num == 0)
return 0;


int digit = num % 10;
int res = num / 10;
if (digit >= d)
{
arr[i] = digit;
return filter(res, d, arr, i + 1) + digit;
}
else
return filter(res, d, arr, i + 1);
}

מה שקורה פה זה שאני מחזיר את סכום הספרות ולא את המספר אז העברתי מערך שמחזיק את כל הספרות הרלונטיות אבל אני לא יודע איך להציג אותו ככה שזה יציג את המספר.

אגב הפונקציה howManyDigits שכתובה בתחילת הפונציה פשוט מחשבת כמה ספרות המספר מכיל ומאתחלת את המערך למספר הזה עלמנת שיהיה מספיק מקום במערך, היא כתובה גם כן בתור רקורסיה אבל לא כללתי את הקוד שלה פה.

פורסם

אם יש לך את הספרות (לפי הסדר), פשוט כפול כל אחת מהן בעשר בחזקת המקום במערך (החל מאפס, מהסוף להתחלה) ותסכום.

פורסם
  • מחבר

אוקיי חשבתי על זה אבל המקומות במערך שנשארו ריקים - יש בהם אפסים

פורסם

אז תחשוב איך להתמודד עם זה. (או לחילופין, תיפטר לחלוטין מהמערך כי הוא לא נחוץ).

פורסם
  • מחבר

הדרך היחידה שחשבתי עליה היא עם מערך, איך אפשר בלי ?

פורסם

תגדיר משתנה עזר, וכל פעם שהספרה שאתה בודק עבור המספר המקורי עומדת בתנאי, תכפול את משתנה העזר ב10 ותוסיף לו את הספרה החדשה.

פורסם
  • מחבר

הצלחתי בסופו של דבר, כל פעם שהייתה ספרה רלוונטית פשוט כפלתי אותה בעשר בחזקת המיקום והחזרתי את המשתנ שסוכם את זה

פורסם

אוקיי, אפשר גם "לקצץ" את המספר המקורי עצמו.

פורסם
  • מחבר

שניצל, פתרתי את זה בדרך אחרת, אפשר בבקשה לראות את הדרך שלך ?

פורסם
int filter(int n, int d) {
if (n == 0) return 0;
if (n%10 >= d) {
return filter(n/10,d)*10 + d;
} else {
return filter(n/10, d);
}
}

פורסם
  • מחבר

תודה רבה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים