חזור לתיקייה: גליון 3

hw3q3

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה

    hw3q3

    02340114

    מבוא למדמח מ

    רשימות הרצאה לקריאה בשבת

    hw3q3

    הופק מתוך תקיית התואר של שקד

    uni-folder.vercel.app

    hw3q3.c

    הערה (קובץ קוד)

    קובץ זה הוא קובץ קוד מסוג C.

    #include <stdio.h>
    #include <stdlib.h>
    
    double pow0_5(int i)
    {
        if (i == 0)
        {
            return 0;
        }
    
        int counter = -1;
        double current = i, currentHalf = i;
        while (counter < currentHalf)
        {
            current = (current / 2) + (i / (2 * current));
            counter++;
            currentHalf /= 2;
        }
    
        return current;
    }
    
    int calculateLumeria(int i, int value)
    {
        return (int)(i * pow0_5(i)) + value;
    }
    
    int findMaxOfD(int p[], int current, int length, int distance, int *w)
    {
        int max = calculateLumeria(current, p[current]), maxIndex = current;
        for (int i = current + 1; (i < current + distance) && (i < length); i++)
        {
            int lumValue = calculateLumeria(i, p[i]);
            if (max < lumValue)
            {
                max = lumValue;
                maxIndex = i;
            }
        }
    
        (*w) = max;
        return maxIndex;
    }
    
    int maxRobotWeight(int p[], int n, int d)
    {
        int maxW = calculateLumeria(0, p[0]), i = 0;
    
        while (i < n - 1)
        {
            int currentMax;
            i = findMaxOfD(p, i + 1, n, d, &currentMax);
            if (currentMax < maxW)
            {
                maxW = currentMax;
            }
        }
    
        return maxW;
    }
    
    int main(void)
    {
        int n, d;
        if (scanf("%d", &n) != 1)
        {
            return 1;
        }
        int *p = (int *) malloc(sizeof(int) * n);
        if (!p)
        {
            return 1;
        }
        for (int i = 0; i < n; i++)
        {
            if (scanf("%d", p + i) != 1)
            {
                free(p);
                return 1;
            }
        }
        if (scanf("%d", &d) != 1)
        {
            free(p);
            return 1;
        }
        printf("%d", maxRobotWeight(p, n, d));
        free(p);
        return 0;
    }