לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
מבוא למדעי המחשב — מועד ב׳
ענו על כל השאלות. שמרו על חתימות הפונקציות הנתונות.
בחרו את סיבוכיות הזמן והמקום ההדוקות ביותר.
void layered(int n) {
for (int i = 1; i < n; i *= 2)
for (int j = 0; j < n / i; j++)
for (int k = 0; k < i; k++)
putchar('.');
}
void shrinking(int n) {
for (int left = n; left > 0; left--)
for (int j = 0; j < left; j++)
putchar('.');
}
void half(int n) {
if (n <= 1) return;
half(n / 2);
}
void down(int n) {
if (n <= 1) return;
down(n - 1);
}
void both(int n) {
half(n);
down(n);
}
כל שורה וכל עמודה ממוינות בסדר עולה. החזירו 1 אם x נמצא, אחרת 0.
דוגמה: במטריצה ששורותיה {1,4,7},{2,5,8},{3,6,9}, עבור x=6 מוחזר 1.
דרישות: התחילו בפינה הימנית העליונה; זמן O(m+N), מקום O(1).
השאירו רק את ההופעה הראשונה של כל תו, לפי הסדר, וקצרו את המחרוזת במקום. החזירו את האורך החדש.
דוגמה: "programming" הופכת ל־"progamin", ומוחזר 8.
דרישות: שני סמנים ומערך seen בגודל 26; זמן Θ(n), מקום Θ(1).
החזירו את מספר הרצפים המסודרים של 1 ו־2 שסכומם n. הסדר חשוב.
דוגמה: עבור n=4 מוחזר 5.
הפונקציה עצמה חייבת להיות רקורסיבית; אין מעטפת ואין לולאות.
אין לשנות את חתימות הפונקציות.