| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1684 人关注过本帖
标题:我们一起来做编程题!
只看楼主 加入收藏
fengqingqi11
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-9-15
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:14 
我们一起来做编程题!
马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭
共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人? 
解方程组 
编写程序,采用穷举法求出结果。 

我是这样做的,应该对吧!
for(int a=1;a<=15;a++){
            for(int b=1;b<=23;b++){
                for(int c=1;c<=28;c++){
                    if(a+b+c==30&&a*3+b*2+c==50){
                        System.out.println(" 男生:"+a+" 女生:"+b+" 孩子:"+c);
                    }
                        
                }
            }
            }
搜索更多相关主题的帖子: 编写程序 趣味数学题 马克思 方程组 男人 
2014-01-25 20:35
fengqingqi11
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-9-15
收藏
得分:0 
大家看看哦

编程从数学开始 欢迎加入 20789138编程互助群
2014-01-25 20:36
gmh0421
Rank: 4
等 级:业余侠客
威 望:2
帖 子:58
专家分:215
注 册:2013-10-22
收藏
得分:1 
想不出别的办法,这个三重循环就是浪费了一些不必要的计算,可以优化下

本人纯属菜鸟,如有不当,请各位大虾指正
希望能在不断的学习中,提高水平
2014-01-26 09:46
welic
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-2-3
收藏
得分:0 
可以改成两重循环,如楼主例子中的第三个for改成c=30-a-b
2014-02-03 16:19
w823352417
Rank: 3Rank: 3
来 自:甘肃兰州
等 级:论坛游侠
威 望:1
帖 子:43
专家分:113
注 册:2012-10-4
收藏
得分:0 
程序代码:
int count=0;
for (int a =1; a <= 30-1-1; a++) {
    for (int b = 1; b < 30-a-1; b++) {
        int c=30-a-b;
        if(a*3+b*2+c==50){
             System.out.println(++count+"-男人:"+a+"\t女人:"+b+"\t孩子:"+c);
        }
    }
}
1-男人:1    女人:18    孩子:11
2-男人:2    女人:16    孩子:12
3-男人:3    女人:14    孩子:13
4-男人:4    女人:12    孩子:14
5-男人:5    女人:10    孩子:15
6-男人:6    女人:8    孩子:16
7-男人:7    女人:6    孩子:17
8-男人:8    女人:4    孩子:18
9-男人:9    女人:2    孩子:19

这样感觉怎么样

在代码中享受乐趣
2014-02-08 13:37
谢跃锋
Rank: 2
等 级:论坛游民
威 望:2
帖 子:50
专家分:77
注 册:2013-4-14
收藏
得分:0 
回复 楼主 fengqingqi11
不明白你为什么要a<15..b<23,,c<28;;不是很理解。。。
2014-02-10 15:37
wlgo2108
Rank: 1
等 级:新手上路
威 望:1
帖 子:8
专家分:0
注 册:2013-10-15
收藏
得分:0 
for(int i=1;i<10;i++){
    for(int j=1;j<20;j++){
        if(2*i+j==20)
            System.out.println("man is "+i+" ;女人有"+j+" 小孩有"+(30-i-j));
    }
}
//方法可能有错 小孩,女人,男人的个数都不能为0

[ 本帖最后由 wlgo2108 于 2014-2-21 21:45 编辑 ]
2014-02-21 21:36
zajenzone
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-2-21
收藏
得分:0 
for(int man=1;man<=17;man++){
            for(int women=1;women<=25;women++){
                int child=30-man-women;
                if(child+man*3+women*2==50)
                    System.out.println("男人"+man+" 女人"+women+" 小孩"+child);
            }
        }



让循环的次数最小,也就是算法的时间复杂度尽量小
2014-02-21 23:29
qizhongshun
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:26
注 册:2011-9-16
收藏
得分:0 
回复 楼主 fengqingqi11
能否解释一下 15,23,28三个数字是如何确定的? 是用了二分查找吗|
2014-02-25 02:12
qizhongshun
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:26
注 册:2011-9-16
收藏
得分:0 
回复 5楼 w823352417
30-1-1 这句该怎么理解|
2014-02-25 02:13
快速回复:我们一起来做编程题!
数据加载中...
 
   



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

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