解题思路: 用for循环遍历所有可能的情况
参考代码:
#include <iostream> #include <algorithm> using namespace std; typedef long long LL; int money[]={5,2,1},num; int check(int number,int salary) { if(number==2)//用一块钱一定能找齐(或者1块用0张)一定会递归到这儿,直接返回这种可能 return 1; LL ans=0; for(int m=0;salary+m*money[number]<=num;m++)//在不超过指定金额的情况(salary+m*money[number]<=num)下遍历 ans+=check(number+1,salary+m*money[number]); return ans; } int main() { /*第给出任意的人民币(>10元)的整币兑换成5元、2元和1元币值(要求三种币值均有)的方法有多少种*/ cin>>num; cout<<check(0,8);//从money[0](5块),开始遍历,每张都有,则初始至少有8块(5,2,1) return 0; } //dongdong
0.0分
0 人评分
点我有惊喜!你懂得!浏览:1392 |
程序员的表白 (C语言代码)浏览:1574 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:436 |
【绝对值排序】 (C++代码)浏览:720 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
简单的a+b (C语言代码)浏览:564 |
P1001 (C语言代码)浏览:836 |
淘淘的名单 (C语言代码)浏览:1167 |
WU-C语言程序设计教程(第三版)课后习题11.11 (C++代码)(想学链表的可以看看)浏览:1462 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:836 |