פורסם 2009 בנובמבר 1616 שנים מחבר עזוב כבר הסתבכנו. תשמע בוא ניקח דוגמא 453.השורה הזאת return (((n % 10) + MakeSum((n / 10),i,sum)));עושה ככה:3+5+4סבבה. יוצא 12. עכשיו הבעיה איפה אני מחלק ב-3. אם לדוגמא אני עושה ככה: return (MakeSum(n,0,0)/3);זה יעבוד. הבעיה שאנחנו לא יודעים שזה 3. ואי אפשר לייבא מהמחלקה MAKESUM את i למחלקה GIVE,נכון?בשורה של הif אני לא יכול לקבל את הערך ולחלק בi , נכון?אז איפה לעזזאל אני יכול לחלק בi?
פורסם 2009 בנובמבר 1616 שנים אתה כבר מחלק ב-i בשורה של ה-return sum/i. תזכור - אתה צריך לחלק ב-i רק פעם אחת, ולא בכל פעם.
פורסם 2009 בנובמבר 1616 שנים מחבר כן אני צריך לחלק רק לאחר חיבור כל המספרים. אבל שחכת שהורדנו את ההשמה לSUM ולכן הוא נשאר זמנית 0
פורסם 2009 בנובמבר 1616 שנים אוקי, אז אתה צריך לדעת להגדיל את sum בין קריאה לקריאה של הפונקציה, בדיוק כמו שאתה מגדיל את i.
פורסם 2009 בנובמבר 1616 שנים אוקי, אבל אתה חייב להעביר את sum כפרמטר, ואסור לך להוסיף אותו לתוצאה של MakeSum (כי התוצאה שלו היא לא באמת סכום, אלא ממוצע). אז מה תעשה?
פורסם 2009 בנובמבר 1616 שנים מחבר ואללה לא יודע אגב הצלחתי לפתור את זה ככה: class sum { public static int Give(int n) { return (MakeSum(n)/MakeDigits(n)); } private static int MakeSum(int n) { if (n<10) return (n); else return ((n % 10) + MakeSum((n / 10))); } private static int MakeDigits(int n) { if (n < 10) return 1; return (1 + MakeDigits(n / 10)); } }} אבל בכל זאת מעניין אותי איך עושים את זה נכון בפתרון שנתתי בהתחלה...
פורסם 2009 בנובמבר 1616 שנים אוקי, הפתרון שלך סבבה בסך הכל.אבל רק לשם השלמות: public static int MakeSum(int n,int i,int sum) { if (n == 0) return (sum/i); else return MakeSum(n/10, i+1, sum+(n%10)); }תחשוב על זה ככה - i סופר את מספר הספרות ב-n, ולכן בכל קריאה לפונקציה מקדמים אותו ב-1. sum סוכם את הספרות ב-n, ולכן בכל קריאה לפונקציה צריך להוסיף לו את הספרה הנוכחית.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.