פורסם 2004 באוקטובר 2821 שנים למביני עניין, הנה חידה חביבה:כתבו פקודה שמחזירה האם מספר הקלט (INTEGER) הוא חזקה של 2 (יש פתרון לוגוריטמי שהוא פחות יפה, ופתרון הרבה יותר פשוט ויפה במשחקים בינארים).
פורסם 2004 באוקטובר 2921 שנים לבדוק אם הראשון הוא 0 וכל מה שאחריו הוא 1, עד שמגיעים לרצף אפסים.למשל:00011110 חזקה00000010 חזקה00100100 לא חזקה00000001 לא חזקהלבדוק אם יש אחדים באמצע שיש ביניהם 0 או הראשן לא מתחיל ב0
פורסם 2004 באוקטובר 2921 שנים מחבר דבר ראשון, אתה לא בכיוון, שאלתי חזקה של 2, לא כפולה של 2 11110 = 30 שזה לא חזקה של 2.דבר שני אמרתי לכתוב פקודה (עדיף בשורה אחת) שעושה את זה, לא שאלתי איך זה אמור להיראות (תחשוב אולי בכיוון של BITWISE OPERATIONS)...
פורסם 2004 באוקטובר 2921 שנים הרעיון הוא שצריך להיות רק ביט אחד דולק.למשל: 01000000 חזקה של 2לעומת זאת : 01001000 - לא חזקה של 2חשבתי על משהו לא יעיל במיוחד, אבל הוא צריך לעבוד (לא בדקתי):for (i=0; (i < sizeof(num)*8) && (((num >> i) & 1) != 1) ; i++);if ((i < sizeof(num)*8) && ((num >> i) == 1)) <Power of two>הרעיון הוא שעוברים על כל המספר ובודקים את הספרה הנוכחית היא 1 ואם המספר שנשאר הוא גם אחד (זאת אומרת שיש רק ביט אחד דולק). ואז המספר הוא חזקה של 2.
פורסם 2004 באוקטובר 2921 שנים מחבר האבחנה שלך נכונה (לגבי מתי ייצוג בינארי הוא חזקה של 2), אבל הפתרון מסורבל מאוד, יש פתרון לבעיה בלי שימוש בלולאות בכלל, אלה ע"י חשבון פשוט ופעולות על ביטים, נסה לחשוב יותר פשוט (מבחינת מימוש ומחשבה).
פורסם 2004 באוקטובר 2921 שנים מחבר ?!?!?!? קוד Cיעני int function (int number) { return (some_code());} GOT IT ?
פורסם 2004 באוקטובר 2921 שנים מחבר דבר ראשון סליחה, לא ראיתי שענית בפוסט הקודם שלך (IP) דבר שני, כל הכבוד דבר אחרון, צריך גם לבדוק שהמספר הוא לא אפס int is_pow_log(int v) { double a = log10(v)/log10(2); return (a == round(a)) ? 1 : 0; } int is_pow_bit(int v) { return !(v & (v - 1)) && v; } הפקודה הראשונה גם עושה את זה, אבל בצורה מתמטית הרבה יותר מסובכת.
פורסם 2004 באוקטובר 3021 שנים int is_pow_log(int v){ double a = log10(v)/log10(2); return a == (int)(a);}יעשה את העבודה
פורסם 2005 בפברואר 720 שנים מחבר יעשה את העבודה הקוד שנתת לא יעבוד נכון.. (וזה מתקשר לחידה הבאה שאני הולך לפרסם ).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.