עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

תרגיל בעייתי שנתקלתי בו במבחנים של גאמא

Featured Replies

פורסם

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

התכנית מקבלת מספרים N ו D (שלמים וחיוביים, N<D) ומדפיסה את N/D כמספר עשרוני באופן הבא:

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

1/4 = 0.25 -> 0.25
1/7 = 0.142857142... -> 0.(142857)
5/6 = 0.8333... -> 0.8(3)

הם גם הוסיפו שבשביל הפשטות אפשר להניח ש N ו D הם בין 1-9, אם זה משנה.

למישהו יש פתרון אלגנטי לבעיה?

פורסם

למצוא את הסגנון של ה 1/7 הצלחתי יפה

אבל הבעיה הייתה ליצור אלגוריתם כולל שיעבוד על ה 5/6

קצת יותר בעייתי

אני עדיין חושב על משהו שיכלול הכל

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

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

כי ברגע שאמרו לך זהם קטנים מ10 כלומר בין 1-9 זה יהיה משהו שעובד על ספירה עשרונית

יכול ליהיות שאני טועה, אבל סביר להניח שזה ככה

אני אמשיך לחשוב ואעדכן אותך

פורסם

הנה פתרון אפשרי, אפשר להרחיב את זה למקרים יותר כללים מההגבלות של 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();
}
}
}

פורסם
  • מחבר

תודה על התגובות.

לא נראה לי שאני אבין את הפתרון שלך בקרוב, אבל הוא עובד מצויין ;D

פורסם

יותר חשוב להבין את הרעיון מאחורי הפתרון (אלגוריתם של חילוק ארוך ומציאת חזרה אחת בשאריות של האלגוריתם), מאשר את המימוש הספציפי.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.