לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n.
חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1),
וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
הניחו כי sqrt פועלת בזמן Θ(1).
שימו לב: אין הבטחה ששלושת הסעיפים מקבלים תשובות שונות.
חשבו כל סעיף מחדש — ובפרט שימו לב לערכי חזרה של פונקציות עזר, למשתנים שמשתנים בין איטרציות,
ולמיקום של free ביחס לקריאה הרקורסיבית.
א.
void f1(int n) {
for (int i = n; i > 0; i /= 2) {
int* p = (int*) malloc(i * sizeof(int));
if (p == NULL) return;
for (int j = 0; j < i; j++)
printf("*");
free(p);
}
}
ב.
void f2(int n) {
for (int i = 1; i * i < n; i++)
for (int j = 1; j < n; j *= 2)
printf("*");
}
ג.
int f3(int n) {
if (n <= 1) return 1;
for (int i = 0; i < n; i++)
printf("*");
return f3(n / 2) + f3(n / 2);
}
הגדרה: מערך arr באורך n ייקרא מערך הררי
אם קיים אינדקס p, כאשר 0 < p < n-1, כך ש-
arr[0] < arr[1] < ... < arr[p] (עולה ממש עד p), וגםarr[p] > arr[p+1] > ... > arr[n-1] (יורד ממש מ-p והלאה)האינדקס p אינו נתון.
על הפונקציה להחזיר את האינדקס שבו מופיע x במערך, או -1
אם x אינו מופיע. אם x מופיע בשתי הצלעות, ניתן להחזיר כל אחד מהאינדקסים.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {1,3,7,9,6,2}, n = 6, x = 7 | 2 | בצלע העולה |
| arr = {1,3,7,9,6,2}, n = 6, x = 6 | 4 | בצלע היורדת |
| arr = {1,3,7,9,6,2}, n = 6, x = 9 | 3 | השיא עצמו |
| arr = {1,3,7,9,6,2}, n = 6, x = 4 | -1 | אינו במערך |
n ≥ 3 וכי המערך אכן הררי.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד.
תת-מחרוזת של s תיקרא סיסמה חזקה אם מתקיימים כל התנאים הבאים:
a, e, i, o, u);על הפונקציה להחזיר את מספר תתי-המחרוזות של s שהן סיסמאות חזקות.
תתי-מחרוזות במקומות שונים נספרות בנפרד, גם אם תוכנן זהה.
| קלט | פלט | הסבר |
|---|---|---|
| s = "abcde" | 5 | — |
| s = "banana" | 8 | — |
| s = "aeiou" | 0 | אין אף עיצור |
| s = "aaa" | 0 | 'a' מופיע שלוש פעמים |
s, אפילו לא באופן זמני.s אינה ריקה.is_vowel. אינכם חייבים להשתמש בה.נתון מערך arr של מספרים שלמים באורך n ≥ 1. ייתכנו איברים
שליליים, חיוביים ואפסים.
תת-מערך רציף הוא קטע רציף ולא ריק של המערך.
על הפונקציה להחזיר את הסכום המרבי של תת-מערך רציף. שימו לב שתת-המערך חייב להכיל לפחות איבר אחד — ולכן אם כל האיברים שליליים, התשובה היא האיבר הגדול ביותר (והיא שלילית).
| קלט | פלט | הסבר |
|---|---|---|
| arr = {-2,1,-3,4,-1,2,1,-5,4}, n = 9 | 6 | {4,-1,2,1} |
| arr = {-1,-2,-3}, n = 3 | -1 | כל האיברים שליליים |
| arr = {1,2,3}, n = 3 | 6 | כל המערך |
| arr = {3,-2,5,-1}, n = 4 | 6 | {3,-2,5} |
רמז: הפרידו בין שני גדלים: הסכום המרבי של תת-מערך המסתיים בדיוק באיבר האחרון, והסכום המרבי בקידומת הקצרה יותר. הראשון מתקבל מהראשון של הקידומת, והתשובה היא המקסימום בין השניים.
examT_q4 עצמה חייבת לקרוא לעצמה.main./grade.