C语言分钞票问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 01:17:54
题目:要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,要求换成30张小钞票,每种面值的至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。
=====================================================
#include<stdio.h>
void main ()
{
int a50,a20,a10,a5;
a50=1;
while(a50<2)
{
a20=1;
while(a20<5)
{
a10=1;
while(a10<10)
{
a5=30-a50-a20-a10;
if(a50*50+a20*20+a10*10+a5*5==500)
printf("a50=%d,a20=%d,a10=%d,a5=%d",a50,a20,a10,a5);
a10++;
}
a20++;
}
a50++;
}
}
==============================================
请问我哪里错了 怎么输出不了结果?

你的循环条件有问题,假设每次循环到达最大值,则a50=1,a20=4,a10=9,总值是50+4*20+9*10 = 220,即使再加上30张5块的也只是 370 何况你设定的5块数目都小于30,怎么会满足输出的条件嘛,自己仔细再想想吧,又不是太难

#include<stdio.h>
void main ()
{
int a50,a20,a10,a5;
a50=1;
while(a50<10) /*50元的要多于10张,因为10张为500元,其他的就没啦*/
{
a20=1;
while(a20<22) /*20元的要多于22张,因为若其他的每个一张要50+10+5=65,所以剩435,22张时就超了*/
{

a10=1;
while(a10<=27) /*10元不能多于27张,因为一共30张,最少都要有一张*/
{

a5=30-a50-a20-a10;

if(a50*50+a20*20+a10*10+a5*5==500 && a5>0) /*5元的不能少于一张*/
printf("\na50=%d,a20=%d,a10=%d,a5=%d",a50,a20,a10,a5);
a10++;
}
a20++;
}
a50++;
}
}