题目
在贪心算法里面最常见的莫过于找零钱的问题了,题目大意如下,对于人民币的面值有1元 5元 10元 20元 50元 100元,下面要求设计一个程序,输入找零的钱,输出找钱方案中最少张数的方案,比如123元,最少是1张100的,1张20的,3张1元的,一共5张!
思路
作一个循环,每次从大的钱遍历。如果还能扣除该钱,就扣除,否则往下遍历,同时把找出去的钱进行记录
代码片:
while(!flag){
for(int i=0;i<6;i++){
if(n>money[i]){ //n代表钱数
n-=money[i];
num[pos++] = money[i];
break;
}
if(n==0){
flag=1;
}
}
}
整体代码
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int money[6] =={100,50,20,10,5,1},num[50];
int n,pos=0,flag =0;
cin>>n;
while(!flag){
for(int i=0;i<6;i++){
if(n>money[i]){
n-=money[i];
num[pos++] = money[i];
break;
}
if(n==0){
flag=1;
}
}
}
for(int j=0;j<pos;j++) cout<<num[j]<<" "; cout<<endl;
}