不是太明白什么意思.
就把他理解成是去商店用100元买100元以内的东西(假设不会出现几毛钱时).售货员可以用多少种找我钱的方法
#include "stdio.h"
void main()
{
int a,b,y1,y2,y3,y4,y5,y6,k=0;
printf("请输入物品价格(0-100):");
scanf("%d",&b);
a=100-b;
if (a>=50)
for(y1=0;y1<=(a/50);y1++)
for(y2=0;y2<=(a/20);y2++)
for(y3=0;y3<=(a/10);y3++)
for(y4=0;y4<=(a/5);y4++)
for(y5=0;y5<=(a/2);y5++)
for(y6=0;y6<=a;y6++)
if(y1*50+y2*20+y3*10+y4*5+y5*2+y6==a)
{
k++;
printf("%d-->50 %d-->20 %d-->10 %d-->5 %d-->2 %d-->1\n",y1,y2,y3,y4,y5,y6);
}
if (50>a && a >=20)
for(y2=0;y2<=(a/20);y2++)
for(y3=0;y3<=(a/10);y3++)
for(y4=0;y4<=(a/5);y4++)
for(y5=0;y5<=(a/2);y5++)
for(y6=0;y6<=a;y6++)
if(y2*20+y3*10+y4*5+y5*2+y6==a)
{
k++;
printf("%d-->20 %d-->10 %d-->5 %d-->2 %d-->1\n",y2,y3,y4,y5,y6);
}
if (20>a && a >=10)
for(y3=0;y3<=(a/10);y3++)
for(y4=0;y4<=(a/5);y4++)
for(y5=0;y5<=(a/2);y5++)
for(y6=0;y6<=a;y6++)
if(y3*10+y4*5+y5*2+y6==a)
{
k++;
printf("%d-->10 %d-->5 %d-->2 %d-->1\n",y3,y4,y5,y6);
}
if (10>a && a >=5)
for(y4=0;y4<=(a/5);y4++)
for(y5=0;y5<=(a/2);y5++)
for(y6=0;y6<=a;y6++)
if(y4*5+y5*2+y6==a)
{
k++;
printf("%d-->5 %d-->2 %d-->1\n",y4,y5,y6);
}
if (5>a && a >=2)
for(y5=0;y5<=(a/2);y5++)
for(y6=0;y6<=a;y6++)
if(y5*2+y6==a)
{
k++;
printf("%d-->2 %d-->1\n",y5,y6);
}
if (2>a && a >=1)
for(y6=0;y6<=a;y6++)
if(y6==a)
{
k++;
printf("%d-->1\n",y6);
}
if (a==0)
printf("不用找钱\n");
else
printf("一共有%d种找法\n",k);
}
感觉太长.请帮优化一下.小弟刚学.不是太懂算法.