חידה יפה

עמוד
מוצגות 12 תגובות – 1 עד 12 (מתוך 12 סה״כ)
  • מאת
    תגובות
  • #76883
    yoav zilberman
    משתתף

    נסו לייעל את קטע התוכנית הבא:

    int x;

    if(x%2!=1)

          x=x/2+1;

    else

       x=x/2;

     

    #78227
    lhason
    משתתף

    x = x/2+!(x%2);

    #78226
    yoav zilberman
    משתתף

    אין משמעות לאופרטור "לא" עבור ביטוי חישוב ולא השוואתי או בוליאני.

    אך אתה קרוב מאוד, נסה לחשוב עוד קצת.

    בברכה,

    יואב

    #78225
    lhason
    משתתף

    וודאי שלאופרטור "לא" יש משמעות.

    השארית שיכולה להתקבל ע"י חלוקה ל-2 היא 1 או 0. לאחר הפעלת האופרטור "לא" השארית תשתנה לאפשרות השנייה.

    ייתכן כי התכוונת שבמקום להשתמש ב "!" עלי להשתמש בטילדה- "~"?

     

    בברכה,

    לירן.

    #78224
    yoav zilberman
    משתתף

    לירן שלום רב!

    קודם כל, כל הכבוד על הניסיונות.

    הרצה מהירה בג'אווה תראה לך שאופרטור "הטילדה" מחזיר מינוס 1 או מינוס 2 (מינוס 1 לזוגיים כאופציה שונה ל-מינוס 2 לאי זוגיים), אופרטור ה"לא" כפי שאני מכנה אותו (ולא הרעיון הלוגי) אינו מתקיים על ביטוי חישוב כפי שכבר ציינתי.

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

    חג שמח וכשר,

    יואב זילברמן

    #78223
    yoav zilberman
    משתתף

    הנה פתרון אחד לייעול עם טילדה:

    x=x+2+~(x%2)

    (חשוב למה)

    נסה לחשוב על פיתרון נוסף לייעול

    #78222
    yoav zilberman
    משתתף

    תיקון ללמעלה:

    x=x/2+2+~(x%2)

    #78220
    lhason
    משתתף

    אם כך, הרשה לי לציין שהפיתרון שלי הינו ב-C++.

    אתה מוזמן לנסות את האופרטור NOT.

    בכל אופן הפיתרון שנתת אכן עובד גם ב-C++ ואשמח אם תיתן הסבר על ההבדלים בין הפיתרון שלך לפיתרון שלי.

     

    בתודה מראש,

    לירן.

    #78218
    yoav zilberman
    משתתף

    לירן שלום רב!

    אני ממש מצטער, הייתי בטוח שכתבת בג'אווה.

    אם כך הפתרון שלך בסדר!

    לגבי ההסבר לפיתרון שהצעתי:

    טילדה היא אינה אופרטור לא אלא אופרטור שמחזיר את המספיר השלילי מהשארית וקטן ממנו ב-1 למשל:

    ~(5%2)=(-2)

    ~(19%4)=(-4)

    לכן מכיוון שהתוכנית הראשונית אומרת:

    אם מספר זוגי- חלק איקס ב-2 והוסף 1

    ואם מספר אי זוגי- הכנס איקס לחלק ל-2

    אזי אם נכניס טילדה נדע שכאשר מספר זוגי יש לנו חסר של  מינוס אחד ואז איקס לחלק ל-2 ועוד 2 ייתן קלט רצוי

    אם מספר אי זוגי טילדה תעשה מינוס 2 ולכן גם כן איקס לחלק ל-2 ועוד 2 יהיה טוב.

    אך ארשה לי להציע את הפתרון המיוחל שהוא יותר פשוט מהאחרים:

    x=x/2+1-(x%2)

    מה אתה חושב?? 

    #78216
    yoav zilberman
    משתתף

    לירן שלום!

    נסה גם לפתור את החידות האחרות שפירסמתי:

    את חידת הסדרה, חידה 4, חידה בג'אווה (אם אתה יודע, אם לא אוכל לתרגם לך לשפה שאתה כן יודע מלבד אסמבלי).

    #78215
    lhason
    משתתף

    יואב שלום,

    ידוע לי כי אופרטור טילדה אינו מבצע את הפעולה של האופרטור "לא" אך שיערתי כי אתה מעוניין לראות אותו בפיתרון. בכל אופן, אהבתי את הפיתרון האחרון שהצעת.
    בקרוב אנסה לפתור את החידות האחרות.

    בברכת חג שמח,
    לירן.

    #78214
    yoav zilberman
    משתתף

    אפשר גם :

    x=x/2+(x+1)%2

    להשתמע,

    יואב

מוצגות 12 תגובות – 1 עד 12 (מתוך 12 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.