3660 - 6.硬币方案
有50枚硬币,可能包括4种类型:1元,5角,1角,5分。
<span style="font-family:宋体;">已知总价值为</span><span>20</span><span style="font-family:宋体;">元。求各种硬币的数量。</span><span></span>
<span style="font-family:宋体;">比如:</span><span>2,34,6,8 </span><span style="font-family:宋体;">就是一种答案。</span><span></span>
<span style="font-family:宋体;">而</span><span> 2,33,15,0 </span><span style="font-family:宋体;">是另一个可能的答案,显然答案不唯一。</span><span></span>
<span style="font-family:宋体;">你的任务是确定类似这样的不同的方案一共有多少个(包括已经给出的</span><span>2</span><span style="font-family:宋体;">个)?</span><span></span>
<span style="font-family:宋体;">直接提交该数字,不要提交多余的内容。</span><span></span>
题目输入
题目输出
输入/输出样例
题目输入
题目输出
C语言解答
#include <stdio.h> int nSum=2000; int money[4]={5,10,50,100}; int a[50]; int cnt; void backpack(int n,int idx) { if(n<0) return; if(idx==50) { if (n==0) cnt++; return; } for(int i=0;i<4;i++) { if(idx==0||money[i]>=a[idx-1])//保证后面的数比前面的数大 { a[idx]=money[i]; backpack(n-money[i],idx+1); } } } int main() { backpack(nSum,0); printf("%d",cnt); return 0; }
C++解答
#include<iostream> using namespace std; int main() { //cout<<"tag&&(*p!=*(p+1))&&*(p+1)!='\\n'"; //cout<<"2.506184";t //cout<<"1835421";t //cout<<"spell(n-1)*0.99";t cout<<"50"; return 0; }