לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n.
חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1),
וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
הניחו כי sqrt פועלת בזמן Θ(1).
שימו לב: אין הבטחה ששלושת הסעיפים מקבלים תשובות שונות.
חשבו כל סעיף מחדש — ובפרט שימו לב לערכי חזרה של פונקציות עזר, למשתנים שמשתנים בין איטרציות,
ולמיקום של free ביחס לקריאה הרקורסיבית.
א.
void f1(int n) {
for (int i = 1; i < n; i++) {
int j = i;
while (j > 1)
j /= 2;
printf("*");
}
}
ב.
void f2(int n) {
int i = 0;
while (i * i < n) {
for (int j = 0; j < i; j++)
printf("*");
i++;
}
}
ג.
int g(int n) {
int s = 0;
for (int i = 0; i < n; i++)
s += i;
return s;
}
void f3(int n) {
for (int i = 0; i < g(n); i++)
printf("*");
}
נתון מערך arr באורך n, שבו כל ערך מופיע בדיוק שלוש פעמים,
בשלושה תאים סמוכים — פרט לערך אחד ויחיד המופיע פעם אחת בלבד.
השלישיות מסודרות בזו אחר זו, והערך היחיד עשוי להופיע בכל מקום ביניהן, לרבות בהתחלה או בסוף.
על הפונקציה להחזיר את האינדקס של הערך היחיד המופיע פעם אחת בלבד.
| קלט | פלט | הסבר |
|---|---|---|
| arr = {9,1,1,1,3,3,3}, n = 7 | 0 | היחיד בהתחלה |
| arr = {1,1,1,9,3,3,3}, n = 7 | 3 | היחיד באמצע |
| arr = {1,1,1,3,3,3,9}, n = 7 | 6 | היחיד בסוף |
| arr = {2,5,5,5}, n = 4 | 0 | שלישייה אחת בלבד |
n mod 3 == 1 וכי המבנה אכן כמתואר.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד, ומספר שלם וחיובי k.
תת-מחרוזת של s היא רצף רציף ולא ריק של תווים ב-s.
על הפונקציה להחזיר את מספר תתי-המחרוזות של s שמספר התווים השונים
המופיעים בהן הוא בדיוק k.
תתי-מחרוזות במקומות שונים נספרות בנפרד, גם אם תוכנן זהה.
| קלט | פלט | הסבר |
|---|---|---|
| s = "abc", k = 1 | 3 | "a", "b", "c" |
| s = "abc", k = 2 | 2 | "ab", "bc" |
| s = "aaa", k = 1 | 6 | כל תת-מחרוזת |
| s = "aabbcc", k = 2 | 8 | — |
s, אפילו לא באופן זמני.k ≥ 1 וכי s אינה ריקה.k" קל יותר לחשב כהפרש של שתי כמויות מסוג "לכל היותר".נתון מערך arr של מספרים שלמים באורך n.
יש למיין את המערך בסדר לא-יורד בשיטת מיון בחירה: בכל שלב מוצאים את האיבר המינימלי מבין הנותרים (במקרה של שוויון — המינימלי הראשון), ומחליפים אותו עם האיבר הראשון שטרם מוין. אם המינימלי כבר במקומו — לא מבצעים החלפה.
על הפונקציה למיין את המערך במקום, ולהחזיר את מספר ההחלפות שבוצעו.
| קלט | פלט | arr לאחר הקריאה |
|---|---|---|
| arr = {3,2,1}, n = 3 | 1 | {1,2,3} |
| arr = {5,4,3,2,1}, n = 5 | 2 | {1,2,3,4,5} |
| arr = {1,2,3}, n = 3 | 0 | {1,2,3} |
| arr = {5,1,2,3,4}, n = 5 | 4 | {1,2,3,4,5} |
examT_q4 עצמה חייבת לקרוא לעצמה.main./grade.