הביאו לי 2 תרגילים, אבל אני מצליח לעשות אותם רק ביגלל שאני תחמן קטן ולא נראה לי שאני אמור לפתור את זה ככה P=.
1.כתוב פעולה המקבלת מס' שספרותיו אינו ידוע ומחסנית שמכילה ספרות, על הפעולה להחזיר אמת אם ספרות הסמ' מופיעות ברצף במחסנת בכיוון כל שהוא,0מלמעלה למטה או מלמטה למעלה). דוג': X=148 המחסנית [8,4,1,76] יחזיר אמת.אז הפתרון שלי הוא כזה- העברתי את המס' של המחסנית לתוך מחרוזת ובדקתי אם המס' המומר למחרוזת נמצא שם גם בצורה הפוכה וגם לא.
public static bool targil1(int x, Stack<int> sta) { Stack<int> sta2 = new Stack<int>(); string st1 = ""; string st2 = ""; while (sta.IsEmpty() != true) { st1 =st1+ sta.Top(); sta2.Push(sta.Pop()); } while (sta2.IsEmpty() != true) { st2 = st2 + sta.Top(); sta.Push(sta2.Pop()); } if (st1.IndexOf(x.ToString()) != -1 || st2.IndexOf(x.ToString()) != -1) return true; else return false; }
|
אבל בטח צריך לעשות את זה רק באמצעות מחסנית, ואני לא יודע איך עושים את זה ולכן אשמח לראות פתרון של מישהו.
התרגיל השני הוא כזה:
2.כתוב פעולה המקבת 2 רשימות L1 וL2 ידוע שהרשימה L2 מוכלת ברשימה L1 פעם אחת בלבד. על הפעולה לבטל את הרשימה L2 שמופיע ברצף בL1.
גם פה פתרתי את התרגיל עם מחרוזת..
public static List<int> targil2(List<int> l1, List<int> l2) { string st = ""; string st2 = ""; int count = 0; Node<int> pos = l2.GetFirst(); Node<int> pos2 = l1.GetFirst(); while (pos2 != null) { st = st + pos2.GetInfo(); pos2 = pos2.GetNext(); } while (pos != null) { count++; st2 = st2 + pos.GetInfo(); pos = pos.GetNext(); } int start = st.IndexOf(st2); st = st.Remove(start, count); l1 = new List<int>(); pos=null; for (int i = 0; i < st.Length; i++) { pos = l1.Insert(pos, (int)st[i]); } return l1; }
|
אשמח עם תעזרו לי, יש לי מבחן ביום שני ואני חייב לדעת את התשובה לפני כן.
תודה מראש!

