算法更新中:
#include<iostream>
#include<algorithm>
#define Max 7
using namespace std;
struct Money{
int count;//钱的张数
int value;//钱的面额
}money[Max+1];//建立一个关于钱的结构数组,每一个数组中包含了钱的张数,钱的面额。
bool cmp(Money ma,Money mb)
{
return ma.value<mb.value;
}
int solve(int amountMoney)
{
int num=0;//储存总的找回零钱的张数
for(int i=Max;i>0;i--)
{
int tempNum;//储存不同面额零钱的张数
int c=min(amountMoney/money[i].value,money[i].count);//对不同的面额,找回零钱的最多张数;
amountMoney-=c*money[i].count;//找了相应金额的零钱,那么就要相应的减去找了的零钱。
tempNum=c;
num+=c;
cout<<"你找了面额为"<<money[i].value<<"元的"<<tempNum<<"张!"<<endl;
if(money<=0){
return num;
}
}
if(money>0) num=-1;//当你把所有的钱都找出去之后,
//发现钱没找够,那么你的零钱就不够找回给对方。
return num;
}
int main()
{
int k=1;
cout<<"*************************************************"<<endl;
cout<<"****************欢迎来到找零钱系统***************"<<endl;
cout<<"****************此系统只能4次找零***************"<<endl;
cout<<"**************************************************"<<endl;
int countNum;
cout<<"请输入你入你有几种面额的钱:";
cin>>countNum;
cout<<"请输入你所拥有的所有金额信息(1:金额;2:张数)"<<endl;
for(int i=1;i<=countNum;i++){
cout<<"第"<<i<<"种面额的相关信息"<<endl;
cout<<"金额:";
cin>>money[i].value;
cout<<"张数:";
cin>>money[i].count;
}
money[0].value=-1;
money[0].count=-1;
sort(money+1,money+countNum,cmp);
while(k<5){
cout<<"········第"<<k<<"次找零·········"<<endl;
int amountMoney;
cout<<"请输入你要找的总钱:";
cin>>amountMoney;
int res=solve(amountMoney);
cout<<"=============零钱找回结果==============="<<endl;
if(res!=-1){
cout<<"你总共找了"<<res<<"张零钱"<<endl;
}
else {
cout<<"抱歉,没有零钱找给你·····"<<endl;
}
k++;
}
return 0;
}
运行结果:
待更新······································
每一天都要活的漂漂亮亮的········这才是该有的生活·······················