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

Chương trình C giải bài toán đổi tiền (Coin Change)

Trong bài toán này, chúng ta được cho một giá trị n và cần tìm số cách để đổi tiền n rupee, với m loại tiền xu có giá trị từ 1 đến m. Yêu cầu là trả về tổng số cách để tạo ra tổng bằng n.

Ví dụ

Input : N = 6 ; coins = {1,2,4}. Output : 6
Giải thích : Các tổ hợp tạo tổng 6 là :
{1,1,1,1,1,1} ; {1,1,1,1,2}; {1,1,2,2}; {1,1,4}; {2,2,2} ; {2,4}.

Mã nguồn C

#include <stdio.h>
int coins(int S[], int m, int n) {
    int i, j, x, y;
    int table[n+1][m];
    for (i = 0; i < m; i++)
        table[0][i] = 1;
    for (i = 1; i < n+1; i++) {
        for (j = 0; j < m; j++) {
            x = (i - S[j] >= 0) ? table[i - S[j]][j] : 0;
            y = (j >= 1) ? table[i][j-1] : 0;
            table[i][j] = x + y;
        }
    }
    return table[n][m-1];
}
int main() {
    int arr[] = {1, 2, 3};
    int m = sizeof(arr)/sizeof(arr[0]);
    int n = 4;
    printf("Tổng số tổ hợp tiền xu tạo tổng %d là %d", n, coins(arr, m, n));
    return 0;
}

Kết quả

Tổng số tổ hợp tiền xu tạo tổng 4 là 4