把一张面值为一元的纸币,换成一分,二分,五分的硬币,共有多少种换法?编程输出每一种不同的换法。
如果每种硬币至少有一个,编程求出所需硬币最少的数目及换法。
- #include<iostream>
- #include<iomanip>
- using namespace std;
- struct coin
- {
- int a;
- int b;
- int c;
- int num;
- }coin[600],min;
- void main()
- {
- int i,j,k,m=0;
- min.num=100;
- for(i=0;i<=20;i++)
- {
- for(j=0;j<=50;j++)
- {
- for(k=0;k<=100;k++)
- {
- if(i*5+j*2+k==100)
- {
- coin[m].a=i;
- coin[m].b=j;
- coin[m].c=k;
- coin[m].num=i+j+k;
- if(i!=0&&j!=0&&k!=0&&coin[m].num<min.num)
- {
- min.a=i;
- min.b=j;
- min.c=k;
- min.num=coin[m].num;
- }
- m++;
- }
- }
- }
- }
- j=0;
- for(i=0;i<m;i++)
- {
- cout<<setw(3)<<coin[i].a<<setw(3)<<coin[i].b<<setw(4)<<coin[i].c<<' ';
- j++;
- if(j%7==0)
- cout<<endl;
- if(j%21==0)
- cout<<endl;//分行显示
- }
- cout<<endl<<"共有"<<m<<"种换法"<<endl;
- cout<<"所需硬币最少的情况:"<<"1分"<<min.c<<"个"<<" 2分"<<min.b<<"个"<<" 5分"<<min.a<<"个共"<<min.num<<"个"<<endl;
- }