Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Số kẹo tối đa có thể mua trong C


Cho mảng candies[] độ dài 'size'. Mỗi candies[i] là số kẹo loại i. Mục tiêu mua nhiều kẹo nhất với bất kỳ số tiền nào. Điều kiện:

Nếu mua X[i] loại i (0 <= X[i] <= candies[i]), thì với mọi j (1 <= j <= i) ít nhất một điều kiện sau đúng:

  • X(j) < X(i) (số kẹo loại j ít hơn loại i)

  • X(j) = 0 (không mua loại j)

Hiểu qua ví dụ.

Đầu vào - Arr[] = {1,3,5,2,6,7}.

Đầu ra - Số kẹo tối đa mua được = 16.

Giải thích - Kẹo mua loại i: {0,3,5,2,6,0}.

Đầu vào - Arr[] = {5,7,7,3,4}.

Đầu ra - Số kẹo tối đa mua được = 10.

Giải thích - Kẹo mua loại i: {0,0,7,3,0}.

Phương pháp chương trình

  • Mảng nguyên candies[] lưu số kẹo loại i.

  • Biến 'size' lưu độ dài mảng.

  • Hàm maxCandies(int arr[], int n) trả về tổng kẹo có thể mua.

  • Giả sử mua loại cuối: bought = arr[n-1].

  • Duyệt từ loại倒 số 2: for(i=n-2; i>=0; i--).

  • Biến x lưu số kẹo loại hiện tại có thể mua: x = min(arr[i], bought-1).

  • Nếu x > 0 thì cộng vào tổng.

  • Nếu tổng > bought trước thì bought = x.

  • Trả về kết quả bought.

Ví dụ

#include <stdio.h>
int maxCandies(int arr[], int n) {
    int bought = arr[n - 1];
    int total = bought;
    // Từ loại倒 số 2
    for (int i = n - 2; i >= 0; i--) {
        int x = arr[i] < bought - 1 ? arr[i] : bought - 1;
        if (x >= 0) {
            total += x;
            bought = x;
        }
    }
    return total;
}
int main() {
    int candies[] = {1, 2, 4, 3, 7};
    int size = 5;
    printf("Tong kẹo co the mua: %d", maxCandies(candies, size));
    return 0;
}

Kết quả

Chạy code cho đầu ra:

Tong kẹo co the mua: 13