C 程序硬币找零

cserver side programmingprogramming

在这个问题中,我们给定一个值 n,我们想要找零 n 卢比,我们有 n 个硬币,每个硬币的价值从 1 到 m。我们必须返回凑齐总和的方法总数。

示例

输入:N = 6 ; 硬币 = {1,2,4}。
输出:6
说明:凑齐总和 6 的总组合是:
{1,1,1,1,1,1} ; {1,1,1,1,2}; {1,1,2,2}; {1,1,4}; {2,2,2} ; {2,4}。

示例

#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("总和为 %d 的硬币组合数",n);
   printf(" 为 %d ", coins(arr, m, n));
   return 0;
}

输出

总和为 4 的硬币组合数为 4

相关文章