以下是用C语言编写的函数,用于计算使用1元、5元和10元三种纸币支付n元钱的方式总数:

#include <stdio.h>

int countPaymentMethods(int n) {
    int dp[n+1][3];
    int coins[] = {1, 5, 10};
    int i, j;

    for (i = 0; i <= n; i++) {
        for (j = 0; j < 3; j++) {
            if (i == 0)
                dp[i][j] = 1;
            else if (j == 0)
                dp[i][j] = 0;
            else {
                int includeCoin = i - coins[j];
                dp[i][j] = dp[i][j-1];
                if (includeCoin >= 0)
                    dp[i][j] += dp[includeCoin][j];
            }
        }
    }

    return dp[n][2];
}

int main() {
    int n;
    printf("请输入要支付的金额:");
    scanf("%d", &n);
    int total = countPaymentMethods(n);
    printf("总共有 %d 种支付方式\n", total);
    return 0;
}

使用动态规划的方式,我们定义一个二维数组dp,其中dp[i][j]表示使用前j种纸币组合支付金额i的方式总数。初始时,若i=0,则表示支付金额为0,只有一种方式;若j=0,则表示没有可用的纸币,此时方式总数为0。对于其他情况,我们可以选择不使用第j种纸币,此时总数为dp[i][j-1];或者选择至少使用一张第j种纸币,此时需要从剩余金额i-coins[j]中挑选纸币,方式总数为dp[includeCoin][j],其中includeCoin >= 0。最终的结果存储在dp[n][2]中,即使用三种纸币时支付金额为n的方式总数。

main函数中,我们通过用户输入获取支付的金额n,然后调用countPaymentMethods函数计算方式总数,并将结果输出。

注意:此函数仅在n较小的情况下有效。对于较大的金额,可以考虑使用其他更高效的算法。

C语言实现求1元、5元、10元支付n元钱的支付方式总数

原文地址: https://www.cveoy.top/t/topic/jW1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录