לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ.
הניחו כי הסיבוכיות של printf ו-free היא Θ(1), וכי סיבוכיות הזמן של
malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
א.
void f1(int n) {
for (int i = 2; i < n; i = i * i) {
for (int j = 1; j < n; j *= 2) {
printf("*");
}
}
}
ב.
int f2(int n) {
if (n <= 1) return 1;
int* arr = (int*) malloc(n * sizeof(int));
if (arr == NULL) return 0;
for (int i = 0; i < n; i++) {
arr[i] = i;
}
int res = f2(n / 2) + f2(n / 2);
free(arr);
return res;
}
ג.
void f3(int n) {
int i = 0;
while (i < n) {
for (int j = 0; j < n; j++) {
printf("*");
}
i += 2;
n = n - 1;
}
}
הגדרה: מערך arr באורך n ייקרא מערך הררי
אם קיים אינדקס p, כאשר 0 < p < n-1, כך ש-
arr[0] < arr[1] < ... < arr[p] (עולה ממש עד p), וגםarr[p] > arr[p+1] > ... > arr[n-1] (יורד ממש מ-p והלאה)כלומר המערך עולה ממש עד לאיבר מקסימלי יחיד ואז יורד ממש. האינדקס p אינו נתון.
הפונקציה מקבלת מערך הררי arr, את אורכו n, ומספר שלם x.
על הפונקציה להחזיר את מספר האיברים במערך הגדולים ממש מ-x.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {1,3,7,9,6,2}, n = 6, x = 5 | 3 | האיברים 7, 9, 6 |
| arr = {1,3,7,9,6,2}, n = 6, x = 9 | 0 | אין איבר גדול מ-9 |
| arr = {1,3,7,9,6,2}, n = 6, x = 0 | 6 | כל האיברים |
| arr = {2,8,5}, n = 3, x = 4 | 2 | האיברים 8, 5 |
n ≥ 3 וכי כל האיברים שונים זה מזה.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד, ומספר שלם וחיובי k.
תת-מחרוזת של s היא רצף רציף ולא ריק של תווים ב-s.
נאמר שתת-מחרוזת היא מאוזנת אם כל תו שמופיע בה מופיע בה בדיוק k פעמים.
(תו שאינו מופיע בתת-המחרוזת אינו מטיל שום דרישה.)
מחזירה את מספר תתי-המחרוזות המאוזנות של s.
תתי-מחרוזות זהות שמופיעות במקומות שונים נספרות בנפרד.
| קלט | פלט | הסבר |
|---|---|---|
| s = "aabbcc", k = 2 | 6 | aa, bb, cc, aabb, bbcc, aabbcc |
| s = "abcabc", k = 1 | 15 | כל תת-מחרוזת באורך 1, 2 או 3 שכל תוויה שונים |
| s = "aaa", k = 2 | 2 | "aa" באינדקסים 0-1 וב-1-2 |
| s = "abc", k = 2 | 0 | אין תו שמופיע פעמיים |
s, אפילו לא באופן זמני.k ≥ 1 וכי s אינה ריקה.נתון מערך arr של מספרים שלמים (ייתכנו גם שליליים ואפסים) באורך n, ומספר שלם k.
תת-מערך רציף של arr הוא רצף רציף ולא ריק של איברים במערך.
על הפונקציה להחזיר את מספר תתי-המערכים הרציפים שסכום איבריהם הוא בדיוק k.
תת-מערכים במקומות שונים נספרים בנפרד, גם אם תוכנם זהה.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {1,2,3,-2,2}, n = 5, k = 3 | 4 | {1,2}, {2,3,-2}, {3}, {3,-2,2} |
| arr = {1,1,1}, n = 3, k = 2 | 2 | האינדקסים 0-1 ו-1-2 |
| arr = {0,0}, n = 2, k = 0 | 3 | {0}, {0}, {0,0} |
| arr = {5}, n = 1, k = 4 | 0 | — |
examT_q4 חייבת בעצמה להיות רקורסיבית.main./grade.