לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n.
חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1),
וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
הניחו כי sqrt פועלת בזמן Θ(1).
שימו לב: אין הבטחה ששלושת הסעיפים מקבלים תשובות שונות.
חשבו כל סעיף מחדש — ובפרט שימו לב לערכי חזרה של פונקציות עזר, למשתנים שמשתנים בין איטרציות,
ולמיקום של free ביחס לקריאה הרקורסיבית.
א.
void f1(int n) {
for (int i = 1; i < n; i++)
for (int j = 0; i * j < n; j++)
printf("*");
}
ב.
int f2(int n) {
if (n <= 1) return 1;
int* a = (int*) malloc(n * sizeof(int));
if (a == NULL) return 0;
int r = f2(n - 1);
free(a);
return r;
}
ג.
void f3(int n) {
for (int i = 1; i < n; i *= 2)
for (int j = 1; j < i; j *= 2)
printf("*");
}
הגדרה: מערך arr באורך n ייקרא מערך מסובב
אם הוא התקבל ממערך ממוין בסדר עולה ממש על ידי סיבוב מחזורי שמאלה ב-r מקומות,
עבור 0 ≤ r < n כלשהו. הערך r אינו נתון.
לדוגמה, {0,1,2,4,5,6,7} מסובב ב-3 מקומות הוא {4,5,6,7,0,1,2}.
הפונקציה מקבלת מערך מסובב, את אורכו, ומספר שלם k המקיים 1 ≤ k ≤ n.
על הפונקציה להחזיר את האיבר ה-k בגודלו במערך — כלומר האיבר שהיה
במקום ה-k במערך הממוין המקורי (k = 1 הוא הקטן ביותר).
| קלט | פלט | הסבר |
|---|---|---|
| arr = {4,5,6,7,0,1,2}, n = 7, k = 1 | 0 | הקטן ביותר |
| arr = {4,5,6,7,0,1,2}, n = 7, k = 4 | 4 | הרביעי בגודלו |
| arr = {4,5,6,7,0,1,2}, n = 7, k = 7 | 7 | הגדול ביותר |
| arr = {30,40,50,10,20}, n = 5, k = 3 | 30 | — |
n ≥ 1 וכי כל האיברים שונים זה מזה.r היא רק חצי מהפתרון — לאחר מכן יש להמיר את
k לאינדקס במערך המסובב.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד.
רצף במחרוזת הוא קטע רציף ומקסימלי של תווים זהים. לדוגמה, במחרוזת
"aabbbca" יש ארבעה רצפים: aa, bbb, c, a.
על הפונקציה לכווץ כל רצף במחרוזת לתו בודד — במקום, בתוך s עצמה —
ולהחזיר את אורכה החדש של המחרוזת. יש להקפיד שהמחרוזת החדשה תסתיים ב-'\0'.
| קלט | פלט | s לאחר הקריאה |
|---|---|---|
| s = "aabbcc" | 3 | "abc" |
| s = "aaaa" | 1 | "a" |
| s = "abababab" | 8 | "abababab" |
| s = "mississippi" | 8 | "misisipi" |
s אינה ריקה.נתונים שני מערכים של מספרים שלמים: a באורך na ו-b באורך nb.
נאמר ש-a הוא תת-סדרה של b אם ניתן למחוק אפס איברים או יותר מ-b,
מבלי לשנות את סדר הנותרים, ולקבל בדיוק את a.
על הפונקציה להחזיר 1 אם a הוא תת-סדרה של b, ו-0 אחרת.
| קלט | פלט | הסבר |
|---|---|---|
| a = {1,2}, b = {1,3,2} | 1 | מוחקים את 3 |
| a = {2,1}, b = {1,3,2} | 0 | הסדר אינו נשמר |
| a = {1,1,1}, b = {1,2,1} | 0 | ב-b יש רק שני 1 |
| a = {2,4,6}, b = {1,2,3,4,5,6} | 1 | מוחקים את 1, 3, 5 |
examT_q4 חייבת בעצמה להיות רקורסיבית.main./grade.