לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n.
חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1),
וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n).
הניחו כי sqrt פועלת בזמן Θ(1).
שימו לב: אין הבטחה ששלושת הסעיפים מקבלים תשובות שונות.
חשבו כל סעיף מחדש — ובפרט שימו לב לערכי חזרה של פונקציות עזר, למשתנים שמשתנים בין איטרציות,
ולמיקום של free ביחס לקריאה הרקורסיבית.
א.
int g(int n) {
int s = 0;
for (int i = 0; i < n; i++)
s += i;
return s;
}
void f1(int n) {
for (int i = n; i > 0; i /= 2) {
int* p = (int*) malloc(i * sizeof(int));
if (p == NULL) return;
int k = g(i);
for (int j = 0; j < k; j++)
printf("*");
free(p);
}
}
ב.
void f2(int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 1; k < n; k *= 2)
printf("*");
}
ג.
void f3(int n) {
for (int i = 1; i < n; i++)
for (int j = i; j < n; j *= 2)
printf("*");
}
נתונה מטריצה mat בעלת m שורות ו-N עמודות
(N מוגדר ב-#define בשלד, אך אינו נחשב קבוע לצורך הסיבוכיות).
כל שורה בנפרד ממוינת בסדר לא-יורד; אין שום קשר בין שורה לשורה.
על הפונקציה להחזיר את מספר האיברים במטריצה הקטנים ממש מ-x.
| קלט | פלט | הסבר |
|---|---|---|
| mat = {{1,3,5,7},{2,4,6,8},{0,9,10,11}}, m = 3, x = 5 | 5 | 1,3 · 2,4 · 0 |
| אותה מטריצה, x = 9 | 9 | כל השורה הראשונה והשנייה, ועוד 0 |
| אותה מטריצה, x = 0 | 0 | אין איבר קטן מ-0 |
| mat = {{1,2,3,4}}, m = 1, x = 3 | 2 | 1,2 |
m ≥ 1. ייתכנו ערכים שליליים וערכים חוזרים.נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד.
תת-מחרוזת תיקרא כמעט-מאוזנת אם בדיוק אות אחת מופיעה בה מספר אי-זוגי של פעמים (וכל יתר האותיות המופיעות בה — מספר זוגי של פעמים). שקול לכך: ניתן לסדר מחדש את תוויה ולקבל פלינדרום באורך אי-זוגי.
על הפונקציה להחזיר את מספר תתי-המחרוזות הכמעט-מאוזנות של s.
תתי-מחרוזות במקומות שונים נספרות בנפרד, גם אם תוכנן זהה.
| קלט | פלט | הסבר |
|---|---|---|
| s = "aab" | 4 | "a", "a", "b", "aab" |
| s = "abc" | 3 | שלושת התווים הבודדים |
| s = "aaa" | 4 | שלוש באורך 1, ועוד "aaa" |
| s = "abab" | 6 | — |
s, אפילו לא באופן זמני.n.int יחיד, ולעדכן אותו בפעולה אחת לכל תו. כמה ביטים דלוקים בו
כאשר תת-המחרוזת כמעט-מאוזנת?נתון מספר שלם ואי-שלילי n. יש לרצף לוח בגודל 2 × n באמצעות
שני סוגי אריחים:
1 × 2, שניתן להניח אנכית או אופקית;2 × 2.האריחים אינם חופפים ואינם חורגים מהלוח, ויש לכסות אותו במלואו.
על הפונקציה להחזיר את מספר הריצופים השונים של הלוח.
עבור n = 0 יש ריצוף אחד (הריק).
| קלט | פלט | הסבר |
|---|---|---|
| n = 1 | 1 | דומינו אנכי יחיד |
| n = 2 | 3 | שני אנכיים · שני אופקיים · ריבוע |
| n = 3 | 5 | — |
| n = 5 | 21 | — |
רמז: חשבו על העמודה השמאלית ביותר. כמה דרכים יש לכסות אותה, וכמה עמודות כל אחת מהן "צורכת"? מכאן נובעת נוסחת נסיגה עם שני איברים קודמים ומקדם שאינו 1.
examT_q4 עצמה חייבת לקרוא לעצמה.main./grade.