ABA


"שאלה מצוינת ב - C - כולם מוזמנים לנסות..."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13319 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13319
MadXP

   23:13   23.05.06   
אל הפורום  
  שאלה מצוינת ב - C - כולם מוזמנים לנסות...  
 
   ערכתי לאחרונה בתאריך 23.05.06 בשעה 23:13 בברכה, MadXP
 
דרגת קושי : 4/5

נתון לי מספר ואני רוצה לדעת אם המספר הוא חזקה של 2.
בשורה אחת בלבד וללא לולאות!..יש הצעות?


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  רמז... MadXP 24.05.06 16:37 1
     1 יחידי אם אני זוכר נכון ? או שאני טועה ? דני15  24.05.06 18:05 2
         נכון מאוד! איך ממשיכים משם? MadXP 24.05.06 18:19 3
             ניסיתי לשנות כל מיני פעולות לוגיות עם ביטים Net_Boy  25.05.06 17:39 4
  אולי... bizho 26.05.06 19:08 5
     לא הבנתי מה הרעיון... MadXP 26.05.06 20:45 6
         צודק, לא היה לי יותר מדי זמן לחשוב על זה. bizho 26.05.06 21:10 7
             המשתנה הוא Integer לצורך הדוגמא.. MadXP 27.05.06 00:36 8
                 Signed/Unsigned? משנה? bizho 27.05.06 00:52 9
                     תתיחס אליו כ unsigned .. זה לא אמור להשפיע על הפתרון. MadXP 27.05.06 10:05 10
                         הנקודה היא.. bizho 27.05.06 12:32 11
                             sizeof? sHuMpI 27.05.06 15:01 12
                             זה לא משנה.. MadXP 27.05.06 15:12 13
  אפשר להשתמש ב shiftleft לא?, ולהשוות את המספר החדש לישן * 2 עידן_הכלי 27.05.06 21:04 14
     קח לדוגמא את המספר 6 bizho 27.05.06 22:00 15
         נכון, אני אחשוב על משהו אחר וגם לי יש בגרות 005 עידן_הכלי 27.05.06 22:15 16
             חברה...אמרנו בלי לולאות כן..? MadXP 27.05.06 23:14 17
                 הוא רצה לעשות רק שיפט אחד.. bizho 27.05.06 23:17 18
                     הבנתי...טעות שלי אבל זה עדיין לא הפתרון. MadXP 28.05.06 00:10 21
                 אפשר פתרון? עידן_הכלי 27.05.06 23:18 19
                     נחכה למחר..נתן עוד קצת זמן לחשוב... MadXP 28.05.06 00:09 20
  לדעתי פתרתי: bizho 28.05.06 01:07 22
     יפה! זו דרך שונה ממה שחשבתי אבל גם פותרת... MadXP 28.05.06 10:51 23
         האמת, חשבתי על הדרך שלך, אבל משהו לא הסתדר לי. bizho 28.05.06 11:27 24
     כל הכבוד :) Nesher  28.05.06 21:08 25
         תודה :) bizho 28.05.06 21:23 26
             מאוד חשוב להבריק בתיכנות מאשר לישון חחח :) Nesher  28.05.06 21:35 27
                 במיוחד כשיש בגרות במתמטיקה :) bizho 28.05.06 21:53 28

       
MadXP

   16:37   24.05.06   
אל הפורום  
  1. רמז...  
בתגובה להודעה מספר 0
 
   מה מיוחד במספר שהוא חזקה של 2 בצורתו הבינארית?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   18:05   24.05.06   
אל הפורום  
  2. 1 יחידי אם אני זוכר נכון ? או שאני טועה ?  
בתגובה להודעה מספר 1
 
  


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

   18:19   24.05.06   
אל הפורום  
  3. נכון מאוד! איך ממשיכים משם?  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   17:39   25.05.06   
אל הפורום  
  4. ניסיתי לשנות כל מיני פעולות לוגיות עם ביטים  
בתגובה להודעה מספר 3
 
   ולא הצלחתי
חידה קשה ויפה
אני מחכה לפיתרון


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

   19:08   26.05.06   
אל הפורום  
  5. אולי...  
בתגובה להודעה מספר 0
 
   חשבתי על רעיון, לעשות xor על כל הביטים של המספר.
כלומר:
ביט1 xor ביט2 xor ביט3 xor ... xor ביטn.


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

   20:45   26.05.06   
אל הפורום  
  6. לא הבנתי מה הרעיון...  
בתגובה להודעה מספר 5
 
   ביצעת xor בין הביטים, כלומר אם יש מספר אי זוגי של ביטים דלוקים התוצאה תהיה אחת, אחרת אפס.
לאן זה מקדם אותנו?


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

   21:10   26.05.06   
אל הפורום  
  7. צודק, לא היה לי יותר מדי זמן לחשוב על זה.  
בתגובה להודעה מספר 6
 
   בוא נחזור שוב להתחלה. מה אני יודע על המשתנה? כמות ביטים? signed/unsigned?


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

   00:36   27.05.06   
אל הפורום  
  8. המשתנה הוא Integer לצורך הדוגמא..  
בתגובה להודעה מספר 7
 
   ערכתי לאחרונה בתאריך 27.05.06 בשעה 00:36 בברכה, MadXP
 
אבל בוא נאמר שזה לא משנה כ"כ...
זכור גם שאסורות לולאות.
בהצלחה


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

   00:52   27.05.06   
אל הפורום  
  9. Signed/Unsigned? משנה?  
בתגובה להודעה מספר 8
 
  


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

   10:05   27.05.06   
אל הפורום  
  10. תתיחס אליו כ unsigned .. זה לא אמור להשפיע על הפתרון.  
בתגובה להודעה מספר 9
 
  


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

   12:32   27.05.06   
אל הפורום  
  11. הנקודה היא..  
בתגובה להודעה מספר 10
 
   אני יודע כמה ביטים יש לי? זה מספר קבוע? או שאותו פתרון בלי אף שינוי אמור לעבוד גם אם אני מחליף את המספר לlong או לchar?


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

   15:01   27.05.06   
אל הפורום  
  12. sizeof?  
בתגובה להודעה מספר 11
 
  


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

   15:12   27.05.06   
אל הפורום  
  13. זה לא משנה..  
בתגובה להודעה מספר 11
 
  


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

   21:04   27.05.06   
אל הפורום  
  14. אפשר להשתמש ב shiftleft לא?, ולהשוות את המספר החדש לישן * 2  
בתגובה להודעה מספר 0
 
  


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

   22:00   27.05.06   
אל הפורום  
  15. קח לדוגמא את המספר 6  
בתגובה להודעה מספר 14
 
   ותראה שהשיטה שלך לא ממש עובדת.

אלא אם לא הבנתי את זה נכון.


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


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

   22:15   27.05.06   
אל הפורום  
  16. נכון, אני אחשוב על משהו אחר וגם לי יש בגרות 005  
בתגובה להודעה מספר 15
 
   ערכתי לאחרונה בתאריך 27.05.06 בשעה 22:24 בברכה, עידן_הכלי
 


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

   23:14   27.05.06   
אל הפורום  
  17. חברה...אמרנו בלי לולאות כן..?  
בתגובה להודעה מספר 16
 
   בלי לולאות!
פעולה אחת בלבד...איך אתם רוצים לבצע shift כלשהוא..


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

   23:17   27.05.06   
אל הפורום  
  18. הוא רצה לעשות רק שיפט אחד..  
בתגובה להודעה מספר 17
 
  

c <<= 1;


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

   00:10   28.05.06   
אל הפורום  
  21. הבנתי...טעות שלי אבל זה עדיין לא הפתרון.  
בתגובה להודעה מספר 18
 
  


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

   23:18   27.05.06   
אל הפורום  
  19. אפשר פתרון?  
בתגובה להודעה מספר 17
 
  


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

   00:09   28.05.06   
אל הפורום  
  20. נחכה למחר..נתן עוד קצת זמן לחשוב...  
בתגובה להודעה מספר 19
 
  


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

   01:07   28.05.06   
אל הפורום  
  22. לדעתי פתרתי:  
בתגובה להודעה מספר 0
 
  

if ((num ^ (num - 1)) > num)
cout << "yes" << endl;
else
cout << "no" << endl;

הסבר קטן:

בואו ניקח לדוגמא את המספר 4 בייצוג הבינארי שלו:
00100
ריפדתי אותו באפסים משמאל, סתם בשביל הנוחות.
עכשיו, נפחית ממנו אחד, ונקבל את הייצוג הבינארי של 3:
00011
כמו שניתן לשים לב, אם לוקחים מספר שהוא חזקה של שניים ומחסירים ממנו אחד, כל הביטים מימין לmsb יהיו דלוקים.

עכשיו, נבצע פעולת xor על שני המספרים, 4 ו3:
00111
קיבלנו מספר שגדול יותר מארבע, המספר ההתחלתי. זה יקרה רק כאשר המספר ההתחלתי יהיה חזקה של 2, משום שאחרת, הmsb יהיה דלוק בשני המקרים ונקבל תוצאה קטנה יותר.

זה הכל.


הערה קטנה: השיטה הזאת תקבל גם את המספר 0 בתור חזקה של שתיים. אם לא רוצים את זה, אפשר להוסיף תנאי פשוט: && num.


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

   10:51   28.05.06   
אל הפורום  
  23. יפה! זו דרך שונה ממה שחשבתי אבל גם פותרת...  
בתגובה להודעה מספר 22
 
   ערכתי לאחרונה בתאריך 28.05.06 בשעה 10:51 בברכה, MadXP
 
זו גם דרך לפתור את זה.
הרעיון הוא להפחית אחד מהמספר ואכן כאשר המספר חזקה של 2 כל הביטים מימין לאחד הדלוק ידלקו והאחד הדלוק יכבה.

זה יקרה רק כאשר המספר הוא חזקה של 2, אחרת הביט השמאלי ביותר ישאר דלוק.


הפתרון שאני חשבתי עליו הוא:
(num - 1) & (num)
אם התנאי הלוגי מחזיר אפס סימן שהמספר חזקה של 2..
תחשבו על זה..


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

   11:27   28.05.06   
אל הפורום  
  24. האמת, חשבתי על הדרך שלך, אבל משהו לא הסתדר לי.  
בתגובה להודעה מספר 23
 
   במחשבה שנייה, זה כן נכון.

הלקח - לא לפתור חידות כאלה באחת בלילה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   21:08   28.05.06   
אל הפורום  
  25. כל הכבוד :)  
בתגובה להודעה מספר 22
 


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

   21:23   28.05.06   
אל הפורום  
  26. תודה :)  
בתגובה להודעה מספר 25
 
   ההברקה באה לי אי שם בלילה. :D


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   21:35   28.05.06   
אל הפורום  
  27. מאוד חשוב להבריק בתיכנות מאשר לישון חחח :)  
בתגובה להודעה מספר 26
 


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

   21:53   28.05.06   
אל הפורום  
  28. במיוחד כשיש בגרות במתמטיקה :)  
בתגובה להודעה מספר 27
 
  


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

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

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



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