A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 洪运成 中级黑马   /  2013-3-27 19:26  /  1969 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

令人苦恼的题:     有36块砖,要36个人一次性搬完,男人一次可搬4块,女人一次可3块,小孩2个才搬一块,用java编出,求男人,女人,小孩,各有多少人?

java基础--day03.zip

62.76 KB, 下载次数: 211

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

8 个回复

倒序浏览
用穷举法写的,你可以看下,其中几个容易出错的地方,都写上注意了
  1. public class Test{
  2.         public static void main(String[] args) {
  3.                 new PringtResult().getManNum();
  4.         }
  5. }

  6. class PringtResult {
  7.         double sum = 36.0;// 一共36块砖,因小孩搬得砖的数量是小数,此处用double类型
  8.         double temp = 0.0;// 临时变量,用于计算搬得砖的总块数,因小孩搬得砖的数量是小数,此处用double类型
  9.         int allman = 36;// 总人数
  10.         int boy = 0;// 小孩数
  11.         int man = 0;// 男人数
  12.         int woman = 0;// 女人数

  13.         /**
  14.          * 基本原理,一种可能一种可能的去试,计算机的运算速度很快的,
  15.          * 但是我现在还没学会怎样用java写函数来解三元一次方程(可以调用系统函数),
  16.          * 故这里用穷举法
  17.          */
  18.         public void getManNum() {
  19.                 for (int i = 0; i < allman; i++) {
  20.                         boy = i;// 让任意一种人的数量从零开始,这里选取小孩
  21.                         for (int j = 0; j < allman; j++) {
  22.                                 man = j;// 确定一种人之后,再让另一种人从零开始
  23.                                 woman = allman - man - boy;// 第三种人的数量就可以确定了,但是要注意人数不能为负
  24.                                 if (woman > 0) {
  25.                                         temp = boy * 0.5 + man * 4 + woman * 3;// 计算循环到现在这种情况下的人员搬得砖的数量
  26.                                         // 判断跟总砖数是否相同,注意:此时人数已经是36人了,只要再满足是36块砖就行了
  27.                                         if (temp == sum) {
  28.                                                 System.out.println("小孩的个数为:" + boy + "\n男人的个数为:" + man
  29.                                                                 + "\n女人的个数为" + woman);
  30.                                         }
  31.                                 }
  32.                         }
  33.                 }
  34.         }
  35. }
复制代码
希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
class Demo{
        public static void main(String[] args){
                for(int x=1;x<36;x++)        {
                        for(int y=1;y<36;y++)        {
                                if((((36-(4*x+3*y))*2)+x+y) == 36){
                                        System.out.println("x=="+x+"y=="+y)        ;
                                        break;
                                }
                                       
                        }
                }
        }
}我也不知道这个代码对不对,运行后得出的结果是对的。
回复 使用道具 举报
不好意思上个不对。我想这个应该对了吧。class Demo{
        public static void main(String[] args){
                for(int x=1;x<36;x++)        {
                        for(int y=1;y<36;y++)        {
                                for(int z=1;z<36;z++){
                                        if((z/2+x*4+y*3) == 36){
                                        System.out.println("x=="+x+"y=="+y +"z"+z)        ;
                                        break;       
                                }
                                }
                                       
                        }
                }
                System.out.println("imdekdj");
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
我都晕了,不好意思呀,我想我还潜水吧,这两个代码好像都不对,太丢人。请多见谅呀,
回复 使用道具 举报
设男X人,搬砖4X;女Y人,搬砖3Y;孩子Z人,搬砖0.5Z;余下方程:
4X+3Y+0.5Z=36;
X+Y+Z=36;
化简的;
7X+5Y=36;
即X=3,Y=3,Z=30符合;
即可依据上式写程序;
注意类型转换

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
张昶 中级黑马 2013-3-27 20:28:23
7#
public class Zhuan{
        public static void main(String[] args){
                int z = 0;                //小孩数量初始值
                for(int x=0;x<=9;x++){                //外层循环控制男人数量
                        for(int y=0;y<=12;y++){                //内层循环控制女人数量y在0~12变化
                                //内外层循环控制下,小孩数量z的值受x,y的值的制约,小孩数量z = 36-x-y
                                z = 36-x-y;
                                //验证取z值的合理性及得到一组解的合理性
                                if(z%2==0 && 4*x+3*y+z/2==36){
                                        System.out.println("男人:"+ x +",女人:"+ y +",小孩:"+ z);
                                }
                        }       
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
刘策 发表于 2013-3-27 20:23
不好意思上个不对。我想这个应该对了吧。class Demo{
        public static void main(String[] args){
                for(int ...

过来看看大家有什么好方法没,不过哥们儿,您这不对啊,z/2跟咱们平常说的z除以2是不一样的~~
回复 使用道具 举报
牵强的笑掩饰内 发表于 2013-3-27 20:27
设男X人,搬砖4X;女Y人,搬砖3Y;孩子Z人,搬砖0.5Z;余下方程:
4X+3Y+0.5Z=36;
X+Y+Z=36;

亲,这种公式是不能化简的!这涉及到了实际数据,你化简之后7X+5Y=36,此时   哪来的z=30啊?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马