既然说了
[QUOTE]
纸币足够多
[/QUOTE]
应该可以使用多次。。
#include <stdio.h>
int use[6],num[6]={100,50,20,10,5,1},l_num=6,method,all_used;
void show()
{
int i;
method++;
for (i=0;i<6;i++)
{
if (i) printf(", ");
printf("%d元的%3d张",num[i],use[i]);
}
printf(".\n");
}
void dfs(int need,int deep,int used)
{
int i;
if (deep==6&&need==0&&used==all_used)
{
show();
return ;
}
else if (deep==6) return ;
for (i=0;i*num[deep]<=need && i+used<=all_used;i++)
{
use[deep]=i;
dfs(need-i*num[deep],deep+1,used+i);
}
}
int main()
{
int aim;
while (scanf("%d %d",&aim,&all_used)&&aim)
{
method=0;
dfs(aim,0,0);//需要aim,已经有0,已经使用0张
if (!method) printf("Impossible\n");
}
return 0;
}
输入0 X将结束程序
原来还有20的...已改正
[此贴子已经被作者于2007-3-21 13:43:56编辑过]