מבוא למדעי המחשב מ׳/ח׳ — 234114 Round 3 · Moed Bet · Spring 5787 · practice
3:00:00
gcc 13.2 · -std=c99 0/80
1
לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
גודל טקסט

תרגול מבחן 003

מבוא למדעי המחשב — מועד ב׳

זמן מומלץ: 3 שעות · שפת C

ענו על כל השאלות. שמרו על חתימות הפונקציות הנתונות.

שאלה 1 — ניתוח סיבוכיות

לכל קטע קוד בחרו את סיבוכיות הזמן והמקום ההדוקות ביותר.

א

void grow(int n) {
    for (int i = 2; i < n; i *= i)
        putchar('.');
}

ב

void half(int n) {
    if (n <= 1) return;
    half(n / 2);
}

void down(int n) {
    if (n <= 1) return;
    down(n - 1);
}

void both(int n) {
    half(n);
    down(n);
}

ג

void layers(int n) {
    for (int i = 1; i < n; i *= 2)
        for (int j = 0; j < n / i; j++)
            for (int k = 0; k < i; k++)
                putchar('.');
}

שאלה 2 — קיבולת משלוח מינימלית

חלקו את המערך, לפי הסדר, ל־D קבוצות רציפות בדיוק. החזירו את הערך המינימלי האפשרי של סכום הקבוצה הגדולה ביותר.

int examT_q2(int weights[], int n, int D);

דוגמה: עבור המשקלים {1,2,3,4,5,6,7,8,9,10} ו־D=5 מוחזר 15.

דרישות: זמן O(n·log(sum(weights))), מקום נוסף O(1).

שאלה 3 — החלפת התבנית ab

סרקו משמאל לימין. החליפו כל הופעה לא חופפת של "ab" בתו '#', הזיזו את המשך המחרוזת שמאלה והחזירו את מספר ההחלפות.

int examT_q3(char *s);

דוגמה: "cababd" הופכת ל־"c##d", ומוחזר 2.

דרישות: שינוי במקום, זמן Θ(n), מקום נוסף Θ(1).

שאלה 4 — ספירת ביטים דלוקים

החזירו את מספר הביטים שערכם 1 בייצוג הבינארי של מספר שלם אי־שלילי.

int examT_q4(int n);

דוגמה: עבור 13 (בבינארית 1101) מוחזר 3.

הפונקציה עצמה חייבת להיות רקורסיבית; אין פונקציית מעטפת ואין לולאות.

הנחיות הגשה

ניתן להוסיף משתנים מקומיים בלבד. אין לשנות את שמות הפונקציות או את הפרמטרים.