| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:[求助]求一个程序的算法
只看楼主 加入收藏
jtws3000
Rank: 1
等 级:新手上路
帖 子:102
专家分:0
注 册:2006-11-3
收藏
 问题点数:0 回复次数:6 
[求助]求一个程序的算法
现有面值100,50,20,10,5,1元的纸币足够多,输入一个金额m以及纸币张数n,要求从上述的纸币中找出n张,其总金额正好是m,列出所有的方法。如:输入:120元,3张;输出:1张100、2张10,或2张50、1张20。
搜索更多相关主题的帖子: 算法 算法 
2007-03-21 12:39
么么下午茶
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-2-6
收藏
得分:0 
你得先保证你 1,输入的数可以用你给出的 现有的面值表示.
2,是不是只能每种面值只能用一次?
2007-03-21 12:50
oooccc1
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-3-21
收藏
得分:0 
既然说了
[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编辑过]

2007-03-21 13:09
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
我想基本思路应该是双重循环吧。
不是很难的,希望楼主自己能多想想 。
呵。。。

~~我的明天我知道~~
2007-03-21 13:12
oooccc1
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-3-21
收藏
得分:0 

OK!!~
写在那里了,小的数据应该没有问题

2007-03-21 13:36
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

不错嘛 。。。
要是有错误就好了
呵呵。。。。。。。

~~我的明天我知道~~
2007-03-21 13:38
jtws3000
Rank: 1
等 级:新手上路
帖 子:102
专家分:0
注 册:2006-11-3
收藏
得分:0 
非常感谢你们!!!!!!!

请各位大侠多多指点小妹. BLOG: http://blog..cn/iexe
2007-03-21 15:58
快速回复:[求助]求一个程序的算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016656 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved