|
|
חידות
Started by yoav zilberman at 04-18-2008 8:50. Topic has 11 replies.
 
 
|
|
Sort Posts:
|
|
|
|
04-18-2008, 8:50
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
נסו לייעל את קטע התוכנית הבא:
int x;
if(x%2!=1)
x=x/2+1;
else
x=x/2;
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 3:57
|
lhason
Joined on 04-19-2008
Posts 7
|
|
|
|
|
|
04-19-2008, 7:40
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
אין משמעות לאופרטור "לא" עבור ביטוי חישוב ולא השוואתי או בוליאני.
אך אתה קרוב מאוד, נסה לחשוב עוד קצת.
בברכה,
יואב
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 8:35
|
lhason
Joined on 04-19-2008
Posts 7
|
|
|
|
וודאי שלאופרטור "לא" יש משמעות.
השארית שיכולה להתקבל ע"י חלוקה ל-2 היא 1 או 0. לאחר הפעלת האופרטור "לא" השארית תשתנה לאפשרות השנייה.
ייתכן כי התכוונת שבמקום להשתמש ב "!" עלי להשתמש בטילדה- "~"?
בברכה,
לירן.
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 13:52
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
לירן שלום רב!
קודם כל, כל הכבוד על הניסיונות.
הרצה מהירה בג'אווה תראה לך שאופרטור "הטילדה" מחזיר מינוס 1 או מינוס 2 (מינוס 1 לזוגיים כאופציה שונה ל-מינוס 2 לאי זוגיים), אופרטור ה"לא" כפי שאני מכנה אותו (ולא הרעיון הלוגי) אינו מתקיים על ביטוי חישוב כפי שכבר ציינתי.
נסה לחשוב על הצבה ללא שימושים באף אופרטורים , הפתרון יותר פשוט מכפי שנדמה לך.
חג שמח וכשר,
יואב זילברמן
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 13:54
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
הנה פתרון אחד לייעול עם טילדה:
x=x+2+~(x%2)
(חשוב למה)
נסה לחשוב על פיתרון נוסף לייעול
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 14:20
|
lhason
Joined on 04-19-2008
Posts 7
|
|
|
|
אם כך, הרשה לי לציין שהפיתרון שלי הינו ב-C++.
אתה מוזמן לנסות את האופרטור NOT.
בכל אופן הפיתרון שנתת אכן עובד גם ב-C++ ואשמח אם תיתן הסבר על ההבדלים בין הפיתרון שלך לפיתרון שלי.
בתודה מראש,
לירן.
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 22:15
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
לירן שלום רב!
אני ממש מצטער, הייתי בטוח שכתבת בג'אווה.
אם כך הפתרון שלך בסדר!
לגבי ההסבר לפיתרון שהצעתי:
טילדה היא אינה אופרטור לא אלא אופרטור שמחזיר את המספיר השלילי מהשארית וקטן ממנו ב-1 למשל:
~(5%2)=(-2)
~(19%4)=(-4)
לכן מכיוון שהתוכנית הראשונית אומרת:
אם מספר זוגי- חלק איקס ב-2 והוסף 1
ואם מספר אי זוגי- הכנס איקס לחלק ל-2
אזי אם נכניס טילדה נדע שכאשר מספר זוגי יש לנו חסר של מינוס אחד ואז איקס לחלק ל-2 ועוד 2 ייתן קלט רצוי
אם מספר אי זוגי טילדה תעשה מינוס 2 ולכן גם כן איקס לחלק ל-2 ועוד 2 יהיה טוב.
אך ארשה לי להציע את הפתרון המיוחל שהוא יותר פשוט מהאחרים:
x=x/2+1-(x%2)
מה אתה חושב??
|
|
|
|
|
Report
|
|
|
|
04-19-2008, 22:19
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
לירן שלום!
נסה גם לפתור את החידות האחרות שפירסמתי:
את חידת הסדרה, חידה 4, חידה בג'אווה (אם אתה יודע, אם לא אוכל לתרגם לך לשפה שאתה כן יודע מלבד אסמבלי).
|
|
|
|
|
Report
|
|
|
|
04-20-2008, 4:58
|
lhason
Joined on 04-19-2008
Posts 7
|
|
|
יואב שלום,
ידוע לי כי אופרטור טילדה אינו מבצע את הפעולה של האופרטור "לא" אך שיערתי כי אתה מעוניין לראות אותו בפיתרון. בכל אופן, אהבתי את הפיתרון האחרון שהצעת.
בקרוב אנסה לפתור את החידות האחרות.
בברכת חג שמח,
לירן.
|
|
|
|
|
Report
|
|
|
|
04-20-2008, 8:33
|
yoav zilberman
Joined on 04-08-2008
Posts 53
|
|
|
|
אפשר גם :
x=x/2+(x+1)%2
להשתמע,
יואב
|
|
|
|
|
Report
|
|
|
|
|
קודגורו » פורומים » חידות » Re: חידה יפה
|
|
|
|