לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n.
חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1),
וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
הניחו כי sqrt פועלת בזמן Θ(1).
שימו לב: אין הבטחה ששלושת הסעיפים מקבלים תשובות שונות.
חשבו כל סעיף מחדש — ובפרט שימו לב לערכי חזרה של פונקציות עזר, למשתנים שמשתנים בין איטרציות,
ולמיקום של free ביחס לקריאה הרקורסיבית.
א.
void f1(int n) {
int i = 0;
while (i * i < n) {
for (int j = 0; j < i; j++)
printf("*");
i++;
}
}
ב.
int f2(int n) {
if (n <= 1) return 1;
for (int i = 0; i < n; i++)
printf("*");
return f2(n / 2) + f2(n / 2);
}
ג.
void f3(int n) {
for (int i = 0; i < n; i++)
for (int j = 2; j < n; j = j * j)
printf("*");
}
נתון מערך arr באורך n של מספרים שלמים, הממוין בסדר עולה ממש
(arr[0] < arr[1] < ... < arr[n-1]), ומספר שלם c (ייתכן שלילי).
על הפונקציה להחזיר את מספר האינדקסים i שעבורם
arr[i] - i == c (0 אם אין כאלה).
| קלט | פלט | הסבר |
|---|---|---|
| arr = {3,4,5,9,10}, n = 5, c = 3 | 3 | אינדקסים 0, 1, 2 |
| arr = {3,4,5,9,10}, n = 5, c = 6 | 2 | אינדקסים 3, 4 |
| arr = {3,4,5,9,10}, n = 5, c = 0 | 0 | אין אינדקס כזה |
| arr = {-2,0,2,4,6}, n = 5, c = -2 | 1 | רק אינדקס 0 |
n ≥ 1.arr[i+1] ≥ arr[i] + 1.
מה נובע מכך על הסדרה arr[i] - i? האינדקסים המבוקשים יוצרים
קטע רציף, ולכן דרושים שני חיפושי גבול.נתונות שתי מחרוזות s ו-t המכילות אותיות אנגליות קטנות בלבד.
נסמן n = |s| ו-m = |t|, וניתן להניח m ≤ n.
נאמר שתת-מחרוזת של s באורך m היא כמעט-אנגרמה של
t אם ניתן להפוך אותה לאנגרמה של t על ידי שינוי תו אחד בדיוק
(לא פחות ולא יותר).
על הפונקציה להחזיר את מספר תתי-המחרוזות של s באורך m
שהן כמעט-אנגרמות של t.
| קלט | פלט | הסבר |
|---|---|---|
| s = "abcdef", t = "fed" | 1 | "def" — שינוי אחד מספיק |
| s = "hello", t = "ll" | 2 | "el" ו-"lo" — בכל אחד שינוי אחד |
| s = "aabbcc", t = "abc" | 4 | — |
| s = "abab", t = "ab" | 0 | כל חלון כבר אנגרמה — אפס שינויים, לא אחד |
s או t, אפילו לא באופן זמני.נתון מערך arr של מספרים שלמים באורך n (ייתכנו שליליים ואפסים), ומספר שלם x.
על הפונקציה להחזיר את מספר הזוגות (i, j) המקיימים
0 ≤ i < j < n וגם arr[i] + arr[j] == x.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {1,2,3,4}, n = 4, x = 5 | 2 | (1,4) ו-(2,3) |
| arr = {1,1,1}, n = 3, x = 2 | 3 | כל זוג אינדקסים |
| arr = {0,0,0,0}, n = 4, x = 0 | 6 | כל 6 הזוגות |
| arr = {1,2,3}, n = 3, x = 10 | 0 | אין זוג מתאים |
examT_q4 עצמה חייבת לקרוא לעצמה.main./grade.