ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › חידות › חידה יפה
- This topic has 11 תגובות, 2 משתתפים, and was last updated לפני 16 שנים, 7 חודשים by lhason.
-
מאתתגובות
-
18 באפריל 2008 בשעה 08:50 #76883yoav zilbermanמשתתף
נסו לייעל את קטע התוכנית הבא:
int x;
if(x%2!=1)
x=x/2+1;
else
x=x/2;
19 באפריל 2008 בשעה 03:57 #78227lhasonמשתתףx = x/2+!(x%2);
19 באפריל 2008 בשעה 07:40 #78226yoav zilbermanמשתתףאין משמעות לאופרטור "לא" עבור ביטוי חישוב ולא השוואתי או בוליאני.
אך אתה קרוב מאוד, נסה לחשוב עוד קצת.
בברכה,
יואב
19 באפריל 2008 בשעה 08:35 #78225lhasonמשתתףוודאי שלאופרטור "לא" יש משמעות.
השארית שיכולה להתקבל ע"י חלוקה ל-2 היא 1 או 0. לאחר הפעלת האופרטור "לא" השארית תשתנה לאפשרות השנייה.
ייתכן כי התכוונת שבמקום להשתמש ב "!" עלי להשתמש בטילדה- "~"?
בברכה,
לירן.
19 באפריל 2008 בשעה 13:52 #78224yoav zilbermanמשתתףלירן שלום רב!
קודם כל, כל הכבוד על הניסיונות.
הרצה מהירה בג'אווה תראה לך שאופרטור "הטילדה" מחזיר מינוס 1 או מינוס 2 (מינוס 1 לזוגיים כאופציה שונה ל-מינוס 2 לאי זוגיים), אופרטור ה"לא" כפי שאני מכנה אותו (ולא הרעיון הלוגי) אינו מתקיים על ביטוי חישוב כפי שכבר ציינתי.
נסה לחשוב על הצבה ללא שימושים באף אופרטורים , הפתרון יותר פשוט מכפי שנדמה לך.
חג שמח וכשר,
יואב זילברמן
19 באפריל 2008 בשעה 13:54 #78223yoav zilbermanמשתתףהנה פתרון אחד לייעול עם טילדה:
x=x+2+~(x%2)
(חשוב למה)
נסה לחשוב על פיתרון נוסף לייעול
19 באפריל 2008 בשעה 13:55 #78222yoav zilbermanמשתתףתיקון ללמעלה:
x=x/2+2+~(x%2)
19 באפריל 2008 בשעה 14:20 #78220lhasonמשתתףאם כך, הרשה לי לציין שהפיתרון שלי הינו ב-C++.
אתה מוזמן לנסות את האופרטור NOT.
בכל אופן הפיתרון שנתת אכן עובד גם ב-C++ ואשמח אם תיתן הסבר על ההבדלים בין הפיתרון שלך לפיתרון שלי.
בתודה מראש,
לירן.
19 באפריל 2008 בשעה 22:15 #78218yoav zilbermanמשתתףלירן שלום רב!
אני ממש מצטער, הייתי בטוח שכתבת בג'אווה.
אם כך הפתרון שלך בסדר!
לגבי ההסבר לפיתרון שהצעתי:
טילדה היא אינה אופרטור לא אלא אופרטור שמחזיר את המספיר השלילי מהשארית וקטן ממנו ב-1 למשל:
~(5%2)-2)
~(19%4)-4)
לכן מכיוון שהתוכנית הראשונית אומרת:
אם מספר זוגי- חלק איקס ב-2 והוסף 1
ואם מספר אי זוגי- הכנס איקס לחלק ל-2
אזי אם נכניס טילדה נדע שכאשר מספר זוגי יש לנו חסר של מינוס אחד ואז איקס לחלק ל-2 ועוד 2 ייתן קלט רצוי
אם מספר אי זוגי טילדה תעשה מינוס 2 ולכן גם כן איקס לחלק ל-2 ועוד 2 יהיה טוב.
אך ארשה לי להציע את הפתרון המיוחל שהוא יותר פשוט מהאחרים:
x=x/2+1-(x%2)
מה אתה חושב??
19 באפריל 2008 בשעה 22:19 #78216yoav zilbermanמשתתףלירן שלום!
נסה גם לפתור את החידות האחרות שפירסמתי:
את חידת הסדרה, חידה 4, חידה בג'אווה (אם אתה יודע, אם לא אוכל לתרגם לך לשפה שאתה כן יודע מלבד אסמבלי).
20 באפריל 2008 בשעה 04:58 #78215lhasonמשתתףיואב שלום,
ידוע לי כי אופרטור טילדה אינו מבצע את הפעולה של האופרטור "לא" אך שיערתי כי אתה מעוניין לראות אותו בפיתרון. בכל אופן, אהבתי את הפיתרון האחרון שהצעת.
בקרוב אנסה לפתור את החידות האחרות.בברכת חג שמח,
לירן.20 באפריל 2008 בשעה 08:33 #78214yoav zilbermanמשתתףאפשר גם :
x=x/2+(x+1)%2
להשתמע,
יואב
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.