פורסם 2019 במרץ 46 שנים אם מותר להשתמש בפונ' חיצוניות אז ע"י strlen תוכל למצוא את אורך המחרוזת ואם אסור אז תעבור על המחרוזת פעם אחת ותשמור את אורכה ע"י משתנה b שגדל בכל איטרציה עד שאתה מזהה את התו של סוף מחרוזת. לאחר מכן תוכל לעבור על המחרזות מהסוף להתחלה ולחשב את ערכה כאילו שאין בכלל נקודה (להתחיל מהכפיל ב1, ואז 16 וכו') כעת res מחזיק בתוצאה שהיא גדולה פי 16 בחזקת גורם שקשור למיקום הנקודה. אז נצטרך לחלק שוב נשים בb את גודל המחרוזת ונעבור עליה משמאל לימין אך (כלומר בכל איטרציה מקטינים את b באחד ומסתכל התו במיקום s+b-1) כעת בכל איטרציה פשוט מחלקים את res פי 16 עד שמגיעים לתו הנקודה ועוצרים. כך חוסכים את העיניין של לזכור איפה הייתה הנקודה. הנחתי כאן שניתן להשתמש ממש רק בb, res וs בלי פונ' עזר נערך 2019 במרץ 46 שנים על-ידי exeaction
פורסם 2019 במרץ 46 שנים ציטוט של exeaction אם מותר להשתמש בפונ' חיצוניות אז ע"י strlen תוכל למצוא את אורך המחרוזת ואם אסור אז תעבור על המחרוזת פעם אחת ותשמור את אורכה ע"י משתנה b שגדל בכל איטרציה עד שאתה מזהה את התו של סוף מחרוזת. לאחר מכן תוכל לעבור על המחרזות מהסוף להתחלה ולחשב את ערכה כאילו שאין בכלל נקודה (להתחיל מהכפיל ב1, ואז 16 וכו') כעת res מחזיק בתוצאה שהיא גדולה פי 16 בחזקת גורם שקשור למיקום הנקודה. אז נצטרך לחלק שוב נשים בb את גודל המחרוזת ונעבור עליה משמאל לימין אך (כלומר בכל איטרציה מקטינים את b באחד ומסתכל התו במיקום s+b-1) כעת בכל איטרציה פשוט מחלקים את res פי 16 עד שמגיעים לתו הנקודה ועוצרים. כך חוסכים את העיניין של לזכור איפה הייתה הנקודה. הנחתי כאן שניתן להשתמש ממש רק בb, res וs בלי פונ' עזר קלטתי שכל זה לא נכון כיוון שיש בעיה עם ההכפלות פי 16 בחזקת גורם עולה כי אין את הגורם העולה הזה /; אז נשנה קצת ונרוץ על המחרוזת מההתחלה לסוף כאשר b המשתנה הגדל ב1 בכל איטרציה. בכל שלב באיטרציה נוסיף לres את ערך התו המתאים ואז נכפיל את res פי 16. כל למשל, אם אורך המחרוזת היא abc.d ערכו של res יהיה a*16^4+..d*16^1 נחלק ב16 ואז נגיע למצב שיש חישוב ערך ללא התחשבות בנקודה, ואז להתקדם עם השלב השני שהצעתי ציטוט של exeaction
פורסם 2019 במרץ 46 שנים מחבר strlen כבר סורקת את המחרוזת פעם אחת ולכן לא ניתן להשתמש בה. בפתרון שלך אין חזקות שליליות. למשל עבור המחרוזת שלך abc.d צריך a*16^2+b*16^1+c*16^0+d*16^-1 רעיון נוסף? נערך 2019 במרץ 46 שנים על-ידי Dolmiti
פורסם 2019 במרץ 46 שנים ציטוט של Dolmiti strlen כבר סורקת את המחרוזת פעם אחת ולכן לא ניתן להשתמש בה. בפתרון שלך אין חזקות שליליות. למשל עבור המחרוזת שלך abc.d צריך a*16^2+b*16^1+c*16^0+d*16^-1 רעיון נוסף? יש חזקות שליליות כיוון שבצעד השני עוברים על המחרוזת מימין לשמאל ומחלקים ב16 בכל איטרציה, אחרי חישוב a*16^3+...+d, עוברים מימין לשמאל, נתקליחם למשל בתו d ולכן מחלקים ב16 ומקבלים a*16^2+...d*16^-1 ולאחר מכן נתקלים בתו '.' וסיימנו. כן פיספסתי שמותר לעבור על המערך פעם אחת, וכאן אני עובר על המערך משהו כמו פעם וחצי..
פורסם 2019 במרץ 46 שנים מחבר לא הבנתי את ההסבר כי (כנראה) אין לך אפשרות לעבור מימין לשמאל. הפתרון אמור להיות ב 2 שורות קוד. תוכל לכתוב אותן? נערך 2019 במרץ 46 שנים על-ידי Dolmiti
פורסם 2019 במרץ 46 שנים אחרי שיש את הפתרון עד הנקודה ההמשך הוא טריוויאלי: - מחזיקים ב-b את 1/16 ממשיכים לסרוק מהנקודה ימינה - בכל איטרציה מכפילים את b בתו הנוכחי מהחרוזת ומחברים את התוצאה ל-res ואז מחלקים את b ב-16 נערך 2019 במרץ 46 שנים על-ידי etal
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.