| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1596 人关注过本帖
标题:用C语言解决 称重组合问题
只看楼主 加入收藏
konggoo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-6-30
收藏
 问题点数:0 回复次数:14 
用C语言解决 称重组合问题

问题描述:设有1克、2克、5克、10克、20克、50克的砝码各一枚,问使用这些砝码在天平上可称出多少种不同的重量?
要求:1)输出可以称出的所有重量数;
2)对每种可以称出的重量数给出如何称出的方法解释。
请给出具体的程序代码和算法解释 ,谢谢!

搜索更多相关主题的帖子: 称重 C语言 
2006-06-30 09:40
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
显然可以秤出1克到88克之间任何一个整的克数[假如左右托盘都允许放砝码]。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-30 11:03
wolf_elite
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-6-26
收藏
得分:0 
如果用日常生活的思维,可简单推知是1-88
但我编程太菜了,暂时还不能帮助你
我太菜了!!

2006-06-30 12:50
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(wolf_elite)如果用日常生活的思维,可简单推...
以下是引用wolf_elite在2006-6-30 12:50:22的发言:
如果用日常生活的思维,可简单推知是1-88
但我编程太菜了,暂时还不能帮助你
我太菜了!!

其实不需要气馁,跟编程“菜”否还就没有太大关系哩。
首先,不要想得太复杂:暂时只考虑砝码放在同一侧
于是就联想到多个数字的“连加”运算:
形成最大重量可不就是全部相加,是不?
怎样产生一般化的重量呢?显然就是
一部分上托盘,另一部分休息
因此就联想到“排列组合”知识,是不?
是排列还是组合呢?是排列!因为加法运算
遵守交换律。。。。。。。。。。。。。。。

总之,战略上要藐视难题,要有解题的勇气;
战术上则要步步为营、稳扎稳打。寻找适合
自己的突破口,有所斩获。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-30 14:05
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*仅考虑砝码放在同一个托盘*/
#include<stdio.h>
#include<string.h>
main()
{
int a,b,c,x,y,z;
for(z=0;z<=1;z++)
for(y=0;y<=1;y++)
for(x=0;x<=1;x++)
for(c=0;c<=1;c++)
for(b=0;b<=1;b++)
for(a=0;a<=1;a++)
{ int wt=0,len;
char s[80]={0};
if(a){wt+=1;strcat(s,"1+");}
if(b){wt+=2;strcat(s,"2+");}
if(c){wt+=5;strcat(s,"5+");}
if(x){wt+=10;strcat(s,"10+");}
if(y){wt+=20;strcat(s,"20+");}
if(z){wt+=50;strcat(s,"50+");}
len=strlen(s);
if(len==0)continue;
s[len-1]='=';
printf("%s%d\n",s,wt);
}
}

运行情况如下
1=1
2=2
1+2=3
5=5
1+5=6
2+5=7
1+2+5=8
10=10
1+10=11
2+10=12
1+2+10=13
5+10=15
1+5+10=16
2+5+10=17
1+2+5+10=18
20=20
1+20=21
2+20=22
1+2+20=23
5+20=25
1+5+20=26
2+5+20=27
1+2+5+20=28
10+20=30
1+10+20=31
2+10+20=32
1+2+10+20=33
5+10+20=35
1+5+10+20=36
2+5+10+20=37
1+2+5+10+20=38
50=50
1+50=51
2+50=52
1+2+50=53
5+50=55
1+5+50=56
2+5+50=57
1+2+5+50=58
10+50=60
1+10+50=61
2+10+50=62
1+2+10+50=63
5+10+50=65
1+5+10+50=66
2+5+10+50=67
1+2+5+10+50=68
20+50=70
1+20+50=71
2+20+50=72
1+2+20+50=73
5+20+50=75
1+5+20+50=76
2+5+20+50=77
1+2+5+20+50=78
10+20+50=80
1+10+20+50=81
2+10+20+50=82
1+2+10+20+50=83
5+10+20+50=85
1+5+10+20+50=86
2+5+10+20+50=87
1+2+5+10+20+50=88
Press any key to continue


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-02 12:04
canon787
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-6-28
收藏
得分:0 

Learning by heart
2006-07-02 12:47
canon787
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-6-28
收藏
得分:0 


但我想知道怎么把上面运行的运算式添上序号?
或上面一共有多少个运算式把他们的总数统计出来?


Learning by heart
2006-07-02 12:55
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
/*小白同志,又代您改了一下*/
#include<stdio.h>
#include<string.h>
main()
{ int way=0;
int a,b,c,x,y,z;
for(z=0;z<=1;z++)
for(y=0;y<=1;y++)
for(x=0;x<=1;x++)
for(c=0;c<=1;c++)
for(b=0;b<=1;b++)
for(a=0;a<=1;a++)
{ int wt=0,len;
char s[80]={0};
if(a){wt+=1;strcat(s,"1+");}
if(b){wt+=2;strcat(s,"2+");}
if(c){wt+=5;strcat(s,"5+");}
if(x){wt+=10;strcat(s,"10+");}
if(y){wt+=20;strcat(s,"20+");}
if(z){wt+=50;strcat(s,"50+");}
len=strlen(s);
if(len==0)continue;
s[len-1]='=';
printf("%s%d\n",s,wt);way++;
}
printf("there are %d different mass\n",way);
}

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-07-02 14:42
canon787
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-6-28
收藏
得分:0 
thanx~~~

Learning by heart
2006-07-02 15:42
一叶知秋
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-6-3
收藏
得分:0 
–★–
2006-07-02 16:05
快速回复:用C语言解决 称重组合问题
数据加载中...
 
   



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

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