שלוש פעולות בנויות זו על גבי זו, כולן משתמשות בטכניקת 'סיבוב תור' כי אין size()/גישה-אקראית: secret סופרת בלי לשנות, what מוצאת מקסימום, something משווה מקסימום מול תור אחר.
שלוש פעולות בנויות זו על גבי זו, כולן משתמשות בטכניקת 'סיבוב תור' כי אין size()/גישה-אקראית: secret סופרת בלי לשנות, what מוצאת מקסימום, something משווה מקסימום מול תור אחר.
public static int Secret(Queue<int> q) {
Queue<int> temp=new Queue<int>();
while(!q.IsEmpty()){
temp.Insert(q.Remove());
}
int c=0;
while(!temp.IsEmpty()){
c++;
q.Insert(temp.Remove());
}
return c;
}
public static int What(Queue<int> q) {
int len = Secret(q);
int temp = q.Remove();
q.Insert(temp);
for(int i = 0; i < len; i++){
int curr = q.Remove();
q.Insert(curr);
if(curr > temp)
temp = curr;
}
return temp;
}
public static bool Something(Queue<int> q1, Queue<int> q2) {
if(Secret(q1)==0)
return false;
int temp = What(q1);
int len = Secret(q2);
for(int i = 0; i < len; i++){
int curr = q2.Remove();
q2.Insert(curr);
if(temp <= curr)
return false;
}
return true;
}
שלושת התורים לדוגמה. שני קצות כל תור מסומנים בחץ שמאלה בציור המקורי — הכיוון (מי front ומי back) אינו קובע את תוצאות סעיפים א-ג (ראו contentIssues/extraction.risk_resolutions).
a: 3, 1, 5, 1
b: 2, 1, 3, 1
c: 4, 4, 4
סעיף א
עקבו אחרי זימון הפעולה Secret(a) ורשמו מה תהיה תוצאת הזימון.
סעיף ב
עקבו אחרי זימון הפעולה What(b) ורשמו מה תהיה תוצאת הזימון.
סעיף ג
עקבו אחרי זימון הפעולה Something(a, c) ורשמו מה תהיה תוצאת הזימון.
סעיף ד
האם קיימים שני תורים q1, q2 כך ש-Something(q1, q2) = Something(q2, q1)? הסבירו.
סעיף ה
מה מבצעות הפעולות Secret, What, Something?
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.