חידה 2

erezsh

New member
חידה 2

נתבקשתי לחוד חידות הקשורות למחשבים בלבד. דבר זה מגביל ביותר, ולכן רמת חידה זו נפלה מקודמתה. ואתכם הסליחה. בעבודתך כמתכנת התבקשת לכתוב קוד המכפיל X ב-1000 ואת התוצאה שם ב Y. על מנת לעשות את הקוד מהיר ככל שאפשר, הוגבלת לפעולות הבאות בלבד: 1) מותר לחבר בין מספרים. 2) מותר להכפיל בכפולות של 2. (שפת התכנות חסרת חשיבות. יש להשתמש ב * לכפל ו + לחיבור) דוגמא: להכפלת X ב-3 נשתמש ב: y = x*2 + x
 

stac

New member
לפחות זה

(לא בדקתי את הקוד כי עדיין המתרגם לא מוכן)
 

fr!$h

New member
השאלה לא כל כך מובנת

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

erezsh

New member
הסבר

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

fr!$h

New member
אוקיי

2*2*2(2*2(2*(2*(2*(2*x+x)+x)+x)+x)+x) אם משהו מעוניין בדרך הפתרון שיבקש כי אין לי כוח לכתוב אם אף אחד לא רוצה כנראה שלא תראו את הפתרון כמו שצריך כי כתבתי אותו ביישור לשמאל לכן תעבירו את הפתרון ל notepad ותלחצו Ctrl+Shift
 

erezsh

New member
כל הכבוד

פתרון יפה. תשובה נוספת היא: 512x+256x+128x+64x+32x+8x כמובן שני הפתרונות נכונים.
 

fr!$h

New member
הפתרון שלי יותר יעיל!!!!

הפתרון שלך זה כמו לכתוב 1000X זה אותו דבר (זמן העבודה של המעבד יהיה גדול יותר בפתרון שלך, אני חשבתי שאתה רוצה פתרון מהיר ויפה כאחד)
 

erezsh

New member
אני לא בטוח...

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

עוזי 2

New member
פישוט

הרעיון שלך מבוסס על כך ש- 1000=8+32+64+128+256+512 ואפשר לפשט את החישוב ע"י השימוש בנוסחא החליפית: 1000=8-16-1024 (אני מקווה שהנוסחאות יצאו כמו שהם ניראים כרגע בתבנית)
 

עוזי 2

New member
צריך לשנות אותן.

יש שלט כזה "החיסור - אסור". תודה על התיקון.
 

antidot

New member
איך לסבך כפל ב1000

הנה "מימוש" לשני הפתרונות שלכם ב C++ מעניין אם מישהו שלא יודע על מה מדובר יבין...
 

antidot

New member
תיקון

למרות שזה עובר קומפילציה עדיין לען הסדר הטוב הוספתי אינקלודים
 
למעלה