פורסם 2008 בדצמבר 2316 שנים הייתי השבוע במבחנים של גאמא והיה תרגיל אחד ממש בעייתי בשבילי, עכשיו סתם לידע אני רוצה לדעת איך פותרים אותו. זה הולך ככה:התכנית מקבלת מספרים N ו D (שלמים וחיוביים, N<D) ומדפיסה את N/D כמספר עשרוני באופן הבא:אם המספר העשרוני סופי הוא יכתב באופן רגיל. אם הוא לא סופי, החלק הקבוע בו ייכתב באופן רגיל, והחלק שחוזר על עצמו ייכתב בסוגריים. דוגמאות:1/4 = 0.25 -> 0.251/7 = 0.142857142... -> 0.(142857)5/6 = 0.8333... -> 0.8(3)הם גם הוסיפו שבשביל הפשטות אפשר להניח ש N ו D הם בין 1-9, אם זה משנה.למישהו יש פתרון אלגנטי לבעיה?
פורסם 2008 בדצמבר 2316 שנים למצוא את הסגנון של ה 1/7 הצלחתי יפהאבל הבעיה הייתה ליצור אלגוריתם כולל שיעבוד על ה 5/6קצת יותר בעייתיאני עדיין חושב על משהו שיכלול הכלאני בטוח שהם לא מצפים שנרשום פה תוכנית מסובכת , כי ככה מבינים שהבנאדם לא חושבאני כמעט בטוח שזה אמור ליהיות משהו חשבוני, לפחות חלק ממנוכי ברגע שאמרו לך זהם קטנים מ10 כלומר בין 1-9 זה יהיה משהו שעובד על ספירה עשרוניתיכול ליהיות שאני טועה, אבל סביר להניח שזה ככהאני אמשיך לחשוב ואעדכן אותך
פורסם 2008 בדצמבר 2316 שנים הנה פתרון אפשרי, אפשר להרחיב את זה למקרים יותר כללים מההגבלות של 1-9, אבל אז צריך לממש חילוק שלם מלא יותר:using System;using System.Collections.Generic;using System.Text;namespace sequence{ class Program { static string Sequence(int n, int d) { if (n < 1 || n > 9 | d < 1 || d > 9 || n >= d) throw new Exception("go to hell"); StringBuilder str = new StringBuilder("0."); List<int> reminders = new List<int>(); int t = n; while (t != 0) { if (t < d) t *= 10; if (reminders.IndexOf(t) != -1) break; reminders.Add(t); t = t - d * (t / d); } foreach (int i in reminders) { if (i == t) str.Append('('); str.Append(i / d); } if (t != 0) str.Append(')'); return str.ToString(); } static void Main(string[] args) { for (int x = 1; x <= 9; x++) for (int y = 1; y < x; y++) Console.WriteLine("{0}/{1}={2}", y, x, Sequence(y, x)); Console.ReadKey(); } }}
פורסם 2008 בדצמבר 2316 שנים מחבר תודה על התגובות.לא נראה לי שאני אבין את הפתרון שלך בקרוב, אבל הוא עובד מצויין ;D
פורסם 2008 בדצמבר 2316 שנים יותר חשוב להבין את הרעיון מאחורי הפתרון (אלגוריתם של חילוק ארוך ומציאת חזרה אחת בשאריות של האלגוריתם), מאשר את המימוש הספציפי.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.