לחץ ▶ 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) {
int m = 1;
for (int i = n; i > 1; i /= 2) {
for (int j = 0; j < m * n; j++)
printf("*");
m *= 2;
}
}
נתון מערך arr באורך n של מספרים שלמים, הממוין בסדר לא-יורד,
ומספר שלם x. ייתכנו ערכים שליליים וערכים חוזרים.
על הפונקציה להחזיר את המרחק המינימלי בין x לבין איבר כלשהו במערך —
כלומר את הערך המינימלי של |arr[i] - x| על פני כל i.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {1,3,5,7,9}, n = 5, x = 6 | 1 | 5 ו-7 שניהם במרחק 1 |
| arr = {1,3,5,7,9}, n = 5, x = 5 | 0 | 5 נמצא במערך |
| arr = {1,3,5,7,9}, n = 5, x = 100 | 91 | האיבר הקרוב הוא 9 |
| arr = {-5,-1,4,8}, n = 4, x = 0 | 1 | האיבר הקרוב הוא -1 |
n ≥ 1.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד.
תת-מחרוזת של s היא רצף רציף ולא ריק של תווים ב-s.
תת-מחרוזת נקראת פלינדרום אם היא נקראת אותו הדבר משני הכיוונים.
על הפונקציה להחזיר את מספר תתי-המחרוזות של s שהן פלינדרום.
תתי-מחרוזות במקומות שונים נספרות בנפרד, גם אם תוכנן זהה.
| קלט | פלט | הסבר |
|---|---|---|
| s = "abc" | 3 | "a", "b", "c" |
| s = "aaa" | 6 | 3 באורך 1, 2 באורך 2, 1 באורך 3 |
| s = "aba" | 4 | "a", "b", "a", "aba" |
| s = "abba" | 6 | 4 תווים בודדים, "bb", "abba" |
s, אפילו לא באופן זמני.n.s אינה ריקה.נתונים שני מספרים שלמים וחיוביים n ו-k.
על הפונקציה להחזיר את מספר הגורמים הראשוניים השונים של n
שאינם גדולים מ-k. (גורם ראשוני נספר פעם אחת בלבד, גם אם הוא מחלק את
n יותר מפעם אחת.)
| קלט | פלט | הסבר |
|---|---|---|
| n = 12, k = 3 | 2 | 12 = 2²·3 — הראשוניים 2 ו-3 |
| n = 12, k = 2 | 1 | רק 2 |
| n = 30, k = 5 | 3 | 2, 3, 5 |
| n = 7, k = 6 | 0 | 7 ראשוני אך גדול מ-6 |
רמז: דרושות כאן שתי רקורסיות נפרדות — אחת שיורדת על
המועמד מ-k כלפי מטה, ואחת שבודקת ראשוניות. גם בדיקת הראשוניות היא לולאה
במקורה, ולכן גם היא חייבת להיכתב רקורסיבית.
examT_q4 עצמה חייבת לקרוא לעצמה.main./grade.