maor18 פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 התייאשתי, שבוע שלם להגשה ופשוט נתקעתי. 5 תרגילים, 4 עשיתי ואחד פשוט לא מצליח. אשמח שתעזרו לי. התרגיל הוא: כתבו פונקציה חיצונית המקבלת כפרמטר מספר שלם חיובי ומחסנית של ספרות. על הפונקציה להחזיר true אם ספרות של המספר מופיעות ברצף במחסנית בסדר כלשהו ו- false אחרת. איך לעזאזל אני עושה את זה? אני נשברתי כבר נפשית, ניסיתי הכל מהכל. הקוד שלי נראה משהו כזה: Stack<Integer> temp = new Stack<Integer>(); int x = num; boolean flag = false; while (!s.isEmpty()) { if (s.top() == x % 10) { temp.push(s.pop()); x /= 10; if (x == 0) flag = true; } else { temp.push(s.pop()); x = num; } } x = num; while (!temp.isEmpty()) { if (temp.top() == x % 10) { s.push(temp.pop()); x /= 10; if (x == 0) flag = true; } else { s.push(temp.pop()); x = num; } } return flag; ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 במחסנית יכולים להיות איברים נוספים חוץ מהספרות? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 ומה עושים עם כפילויות? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid ומה עושים עם כפילויות? צריכים לבדוק גם אותם, ניקח לדוגמה את המחסנית 3,2,1,1,2 (ה2 הימני הוא הtop בעצם). במקרה הספציפי הזה, עם num=321 זה אמור להחזיר לנו true ומחזיר false. כשעשיתי את ההרצה, ברגע שהוא מגיע ל1 הראשון, הוא מתקיים ומוחק אותו, ולאחר מכן מגיע ל1 השני, הוא לא מתקיים ומוחק גם אותו. ציטוט של af db creid במחסנית יכולים להיות איברים נוספים חוץ מהספרות? רק ספרות ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 אז הדרך הקלה ביותר תהיה לחלץ את הספרות מהמספר (שורה אחת), ואז להשתמש בCollections.indexOfSubList כדי לקבוע אם הספרות מוכלות בstack. משהו כמו שלוש שורות ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid אז הדרך הקלה ביותר תהיה לחלץ את הספרות מהמספר (שורה אחת), ואז להשתמש בCollections.indexOfSubList כדי לקבוע אם הספרות מוכלות בstack. משהו כמו שלוש שורות לא למדנו על זה אז ככה שאני לא יכול להשתמש בזה. אני חייב לעשות פה משהו עם מחסניות עזר ולולאות כדי למצוא הכל... ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 אז בוא נכתוב את זה ידנית. יותר ארוך אבל לא נורא לחלץ את הספרות ממספר לתוך collection כלשהו (שיהיה אפילו stack) אתה יודע? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid אז בוא נכתוב את זה ידנית. יותר ארוך אבל לא נורא לחלץ את הספרות ממספר לתוך collection כלשהו (שיהיה אפילו stack) אתה יודע? אני יכול לעשות בעצם כל עוד המספר שונה מ0, לקחת אותו %10 ולשים אותו בתוך מחסנית וכל פעם לחלק את המספר ב10, לא? השאלה איך אני מתקדם מפה ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 כן. יפה. עכשיו, תכתוב את indexOfSubList. או גירסה קצת שונה שרק מחזירה כן\לא (containsSubList). ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 אם אתה צריך רעיון איך נראה הפיתרון הכללי, הנה הגירסה שכתבתי תוך שימוש בפונקציות ה"אסורות": import java.util.Stack; import java.util.List; import java.util.Collections; import java.util.stream.Collectors; public class Main { private static boolean contained(int i, Stack<Integer> stack) { List<Integer> digits = String.valueOf(i) .chars() .map(Character::getNumericValue) .boxed() .collect(Collectors.toList()); return Collections.indexOfSubList(stack, digits) != -1; } private static <T> Stack<T> asStack(T... items) { Stack<T> result = new Stack<T>(); for (T item : items) { result.push(item); } return result; } public static void main(String[] args) { System.out.println(contained(12345, asStack(0, 1, 2, 3, 4, 5, 6))); System.out.println(contained(12345, asStack(0, 1, 2, 2, 3, 4, 5, 6))); System.out.println(contained(122345, asStack(0, 1, 2, 2, 3, 4, 5, 6))); } } ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid אם אתה צריך רעיון איך נראה הפיתרון הכללי, הנה הגירסה שכתבתי תוך שימוש בפונקציות ה"אסורות": import java.util.Stack; import java.util.List; import java.util.Collections; import java.util.stream.Collectors; public class Main { private static boolean contained(int i, Stack<Integer> stack) { List<Integer> digits = String.valueOf(i) .chars() .map(Character::getNumericValue) .boxed() .collect(Collectors.toList()); return Collections.indexOfSubList(stack, digits) != -1; } private static <T> Stack<T> asStack(T... items) { Stack<T> result = new Stack<T>(); for (T item : items) { result.push(item); } return result; } public static void main(String[] args) { System.out.println(contained(12345, asStack(0, 1, 2, 3, 4, 5, 6))); System.out.println(contained(12345, asStack(0, 1, 2, 2, 3, 4, 5, 6))); System.out.println(contained(122345, asStack(0, 1, 2, 2, 3, 4, 5, 6))); } } קודם כל מודה על העזרה. הבעיה היא שהקוד שלך ממש שונה מהקוד שלי, מבחינת מה מותר ומה אסור. השימושים שלנו הם אך ורק בStack<Integer> s כלשהו, ובלולאות שהם while,for,if,switch,do-while וזהו. שימוש בדברים אחרים אסורים עלינו. לכן זאת בעיה לזרום עם הקוד שלך, אתה מבין? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 הבנתי, זה רק להראות את הרעיון הכללי. הצלחת לממש את containsSubList? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 רגע, מותר לכם להשתמש בשתי stackים (עוד אחד חוץ מההוא הנתון)? או בlist? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid רגע, מותר לכם להשתמש בשתי stackים (עוד אחד חוץ מההוא הנתון)? או בlist? מותר לנו להשתמש בעוד סטאק. זה בדיוק מה שאני עכשיו מנסה לעשות גם. שיניתי קצת את הקוד, הגעתי לכאן: public static boolean ex5(Stack<Integer> s, int num) {// o(n) Stack<Integer> temp = new Stack<Integer>(); int x = num; Stack<Integer> temp1 = new Stack<Integer>(); boolean flag = false; while (!s.isEmpty()) { if (!s.isEmpty() && s.top() == x % 10) { temp1.push(s.pop()); x /= 10; if (x==0) flag=true; } else if (temp1.isEmpty()) { temp.push(s.pop()); } else { if(!temp1.isEmpty()) temp.push(temp1.pop()); x=num; } } x=num; while(!temp1.isEmpty()) { s.push(temp1.pop()); } while(!temp.isEmpty()) s.push(temp.pop()); return flag; } ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 אין שום צורך בלהטוטי stack מסובכים. לStack יש פונקציה בשם elementAt שעושה בדיוק את מה שהשם שלה מרמז ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
הצטרפ/י לדיון
בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.