ABA


"שאלה של מתחילים בשפת Java"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11003 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11003
moshiko17
חבר מתאריך 15.7.09
285 הודעות, דרג אמינות חבר זה
   10:36   11.11.12   
אל הפורום  
  שאלה של מתחילים בשפת Java  
 
   שלום לכולם,
נתנו לנו שיעורי בית לכתוב את התוכנית הבאה:

בעל מכולת מעוניין בתוכנית אשר תעזור לו להחזיר עודף במטבעות בצורה היעילה ביותר, כלומר במספר
המטבעות הקטן ביותר. בהנחה כי בעל המכולת יכול להחזיר עודף אך ורק במטבעות של 5 ₪ 1, ₪ ושל 10 ₪,
כתבו תוכנית המקבלת כקלט את הסכום שבעל המכולת צריך להחזיר כעודף (מספר שלם), ומציג כפלט: א) את
מספר המטבעות שיחזיר בעל המכולת מכל סוג. ב) את מספר המטבעות הכולל שיחזיר בעל המכולת.
למשל: עבור הקלט 18 יתקבל הפלט:
1 NIS coins: 3, 5 NIS coins: 1, 10 NIS coin: 1
Total number of coins: 5 coins

הבעיה היא שאני לא מצליח לחשב את מספר המטבעות של 5 ש"ח (NIS2). את כל השאר הצלחתי.
להלן הקוד שלי:


import java.util.Scanner;
public class Test1 {
public static void main (Stringargs){
int num,nis1,nis2,nis3;
Scanner in=new Scanner (System.in);
System.out.print ("enter num: ");
num=in.nextInt();
nis1=num/10;
nis2=??;
nis3=num-(10*nis1)-5;
System.out.println ("The Numbers of 10 NIS is: "+nis1);
System.out.println ("The Number of 5 NIS are: "+nis2);
System.out.println ("The Number of 1 NIS are: "+nis3);
}
}

מישהוא יכול לעזור לי?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא בדקתי אבל נראה לי שאמור לעבוד: חומוס 11.11.12 13:10 1
     עובד מצויין. תודה! moshiko17 11.11.12 19:56 2
         נתקלתי בלא מעט תרגילים מהסוג הזה חומוס 11.11.12 21:46 3
         נראה לי שכדאי גם לתת לך הסבר למה מה שהוא כתב יעבוד(בערך יעבוד), יוחאי 12.11.12 13:23 4
             שאלה מבחינת סיבוכיות זמן ריצה כמה עוד 12.11.12 21:38 5
                 אסימפטוטית הכל כאן הוא benj  16.11.12 16:37 6

       
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק, 6 נקודות
   13:10   11.11.12   
אל הפורום  
  1. לא בדקתי אבל נראה לי שאמור לעבוד:  
בתגובה להודעה מספר 0
 

nis1 = num / 10;
nis2 = (num % 10) / 5;
nis3 = (num % 5);


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
moshiko17
חבר מתאריך 15.7.09
285 הודעות, דרג אמינות חבר זה
   19:56   11.11.12   
אל הפורום  
  2. עובד מצויין. תודה!  
בתגובה להודעה מספר 1
 
   איך הגעת לפיתרון הזה כאילו למה בחרת דווקא במספרים 5 ו-10 ושימוש במודולו?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק, 6 נקודות
   21:46   11.11.12   
אל הפורום  
  3. נתקלתי בלא מעט תרגילים מהסוג הזה  
בתגובה להודעה מספר 2
 
הם כולם עובדים על אותו עיקרון של שימוש בחלוקה ובמודולו במצבים כאלה ואחרים

אל תדאג זה יבוא לך עם הנסיון


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות, דרג אמינות חבר זה
   13:23   12.11.12   
אל הפורום  
  4. נראה לי שכדאי גם לתת לך הסבר למה מה שהוא כתב יעבוד(בערך יעבוד),  
בתגובה להודעה מספר 2
 
   מודולו מחזיר לך את השארית מהחלוקה, עכשיו בגלל שאנחנו יודעים שצריך להחזיר רק עודפים של 10 ו-5 ו1, אז הלוגיקה היא פשוטה ברגע שתעשה מודולו 5 על סכום הכסף שקיבלת, אתה תקבל את שארית החלוקה (שהיא גם מספר השקלים שאתה צריך להחזיר.


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

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



x = 58;
nis10 = (x - (x % 10)) / 10
nis5 = ((x % 10) - (x % 5)) / 5
nis1 = x % 5


אולי גם את שלי אפשר לקצר איכשהו אין לי מושג במתמטיקה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כמה עוד לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 18.11.09
234 הודעות, 11 פידבק, 19 נקודות
   21:38   12.11.12   
אל הפורום  
  5. שאלה מבחינת סיבוכיות זמן ריצה  
בתגובה להודעה מספר 4
 
   ממה שאני מבין, הכי הרבה מטבעות של 5 שיכולים לחזור זה, מטבע 1
לא עדיף לעשות IF?

אם השארית שווה או גדולה מ 5 אזי, תחזיר מטבע אחד של חמשיה שקלים
אחרת, החזר 0 מטבעות של חמשיה שקלים

השאלה שלי מה יהיה יותר נפוץ לעשות, if כזה או נוסחאה כמו שנכתב פה לפניי, עם round או עם 2 פעולות כמו nis5 = ((x % 10) - (x % 5)) / 5
?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
benj 
חבר מתאריך 11.11.12
146 הודעות, דרג אמינות חבר זה
   16:37   16.11.12   
אל הפורום  
  6. אסימפטוטית הכל כאן הוא  
בתגובה להודעה מספר 5
 
   O(1) אז אין שום הבדל בסיבוכיות


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net