שרשרת חוליות מטיפוס שלם; "שרשרת ההפרשים" שלה היא שרשרת חדשה שבה כל איבר הוא ההפרש בערך מוחלט בין כל זוג איברים סמוכים במקור. דוגמה: 5,20,9,6,5,8,2 -> 15,11,3,1,3,6. הפעלה חוזרת עד לאיבר יחיד ("השורד"):...-> 4,8,2,2,3 -> 4,6,0,1 -> 2,6,1 -> 4,5 -> 1.
שרשרת חוליות מטיפוס שלם; "שרשרת ההפרשים" שלה היא שרשרת חדשה שבה כל איבר הוא ההפרש בערך מוחלט בין כל זוג איברים סמוכים במקור. דוגמה: 5,20,9,6,5,8,2 -> 15,11,3,1,3,6. הפעלה חוזרת עד לאיבר יחיד ("השורד"):...-> 4,8,2,2,3 -> 4,6,0,1 -> 2,6,1 -> 4,5 -> 1.
דוגמה: השרשרת 5→20→9→6→5→8→2 (7 חוליות); שרשרת ההפרשים שלה: |20-5|=15, |9-20|=11, |6-9|=3, |5-6|=1, |8-5|=3, |2-8|=6 — כלומר 15→11→3→1→3→6 (6 חוליות). לסעיף ב׳: הפעלה חוזרת עד שנותר איבר אחד ("השורד"): 5,20,9,6,5,8,2 → 15,11,3,1,3,6 → 4,8,2,2,3 → 4,6,0,1 → 2,6,1 → 4,5 → 1. הפעולה מחזירה 1.
5 → 20 → 9 → 6 → 5 → 8 → 2 → null
(הפרשים) 15 → 11 → 3 → 1 → 3 → 6 → null
(הפרשים) 4 → 8 → 2 → 2 → 3 → null
(הפרשים) 4 → 6 → 0 → 1 → null
(הפרשים) 2 → 6 → 1 → null
(הפרשים) 4 → 5 → null
(הפרשים) 1 → null <- השורד
כתבו פעולה חיצונית בשם differenceList (Java) / DifferenceList (C#) המקבלת הפניה לחוליה ראשונה של שרשרת חוליות. הפעולה תחזיר הפניה לחוליה הראשונה של "שרשרת ההפרשים".
public static Node<int> DifferenceList(Node<int> lst)
כתבו פעולה חיצונית בשם theSurvives (Java) / TheSurvives (C#) המקבלת הפניה לחוליה ראשונה של שרשרת חוליות. על הפעולה לחשב שוב ושוב את שרשרת ההפרשים שלה עד שמתקבלת רשימה עם איבר אחד — איבר זה הוא ה"שורד". על הפעולה להדפיס את כל השרשראות המתקבלות ולהחזיר את ערכו של האיבר ה"שורד". מומלץ להשתמש בפעולה שכתבתם בסעיף א'.
public static int TheSurvives(Node<int> lst)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.