黑马程序员技术交流社区

标题: 一道关于基础测试的困惑 [打印本页]

作者: hoyouly    时间: 2013-8-20 16:36
标题: 一道关于基础测试的困惑
做基础测试题的时候,有一道题感觉有点迷糊,希望得到大家的点拨。
注:基础测试我已经提交了,这个不算是作弊吧。
  1. package com.itheima;

  2. public class Test10 {
  3.         /**
  4.          * 第十题:小明的妈妈每天会给他20元零花钱,
  5.          * 小明每天花一半存一半,每过7天小明又会把所有存款花掉一半,
  6.          * 请编程计算小明需要多少天才能存够100元?
复制代码
这道题我感觉有点争议。 在第13天的时候,妈妈给小明20元,在小明还没有花之前,这个时候小明拥有的钱是105.0元,但是这天他还需要花费10,那样就剩下95元了, 到第19结束,妈妈给小明20,小明又花费10元后,小明手里还有102.5元, 我不知道这道题到想要的答案是到底是13天还是19天。你们是怎么理解这道题的啊!

作者: hoyouly    时间: 2013-8-20 16:41
为什么我帖的代码不显示啊,那我就在沙发位置上再帖一遍。

package com.itheima;

public class Test10 {
        /**
         * 第十题:小明的妈妈每天会给他20元零花钱,
         * 小明每天花一半存一半,每过7天小明又会把所有存款花掉一半,
         * 请编程计算小明需要多少天才能存够100元?
         */
        public static void main(String[] args) {
                saveMoney();
        }
       
        //定义一个方法,用来获得存钱数
        public static void saveMoney(){
                int get=20;//每天得到的钱数
                int spend=10;//花费
                double sum=0;//总钱数
                int day=1;//天数
                while(sum<=100){
                        sum+=get;
                        //当总钱数大于等于100的时候,跳出循环
                        if(sum>=100){
                                break;
                        }
                        sum-=spend;
                        //当天数对7求余等于0的时候,总钱数减半
                        if(day%7==0){
                                sum=sum/2;
                        }       
                        day++;//天数自增加一
                }
                System.out.println("在第"+day+"天,小明存够100元");
        }
}

作者: 白堇翎    时间: 2013-8-20 16:43
难道花去所有存款一半的天数不是第7 14 21天么...
作者: yangjie    时间: 2013-8-20 16:46
按你说的应该是第19天。问的是存款,每天给的20里只有10元会变成存款,花掉的那10元不算。
作者: hoyouly    时间: 2013-8-20 16:47
白堇翎 发表于 2013-8-20 16:43
难道花去所有存款一半的天数不是第7 14 21天么...

在第十九天结束的时候,他就已经存够100元了啊,

作者: 白堇翎    时间: 2013-8-20 16:52
本帖最后由 白堇翎 于 2013-8-20 16:54 编辑
  1. public void saveMoney(){
  2. int money = 0;
  3. int day = 0;
  4. while(money<100){
  5.     day++;
  6.     money +=10;
  7.     if((day%7) == 0)
  8.         money  = money/2;
  9.     }
  10.     syso("第"+day+"天存了"+money+"元")
  11. }
复制代码

作者: 薛鹏鹏    时间: 2013-8-20 17:20
算一下就知道是哪天,输出结果为19
  1. public static void main(String[] args) {
  2.                
  3.                 int day = 1;
  4.                 int money = 0;
  5.                 while(money<100){
  6.                         money = money+10;
  7.                         day++;
  8.                         if(day%7==0)
  9.                                 money = money>>1;
  10.                 }
  11.                 System.out.println("第"+day+"天,小明存够了100元");
  12.         }
复制代码

作者: EYE_SEE_YOU    时间: 2013-8-20 17:37
照这个花钱的方法看来,小明的生活过得还是蛮有规律的嘛
作者: hoyouly    时间: 2013-8-21 08:57
EYE_SEE_YOU 发表于 2013-8-20 17:37
照这个花钱的方法看来,小明的生活过得还是蛮有规律的嘛

咱先不管规律不规律,你觉得该怎么理解这道题啊?

作者: hoyouly    时间: 2013-8-21 08:58
薛鹏鹏 发表于 2013-8-20 17:20
算一下就知道是哪天,输出结果为19

可是在第十三天一开始,妈妈给小明20块钱的时候,这个时候小明已经存够100元了啊

作者: 行如止水    时间: 2013-8-21 09:10
  1. public class Test10 {

  2.         public static void main(String[] args) {
  3.                 int iDeposit = 0;
  4.                 int iDays = 0;
  5.                 while(true){
  6.                         iDays++;
  7.                         iDeposit += 10;
  8.                         if(iDays % 7 == 0){
  9.                                 iDeposit += 10;
  10.                                 iDeposit /= 2;
  11.                         }
  12.                         if(iDeposit >= 100){
  13.                                 System.out.println(iDays);
  14.                                 break;
  15.                         }
  16.                 }
  17.         }
  18. }
复制代码
答案就是13天,鉴定完毕!
作者: EYE_SEE_YOU    时间: 2013-8-21 09:27
hoyouly 发表于 2013-8-21 08:58
可是在第十三天一开始,妈妈给小明20块钱的时候,这个时候小明已经存够100元了啊
...

其实,楼主,当你不确定题目具体意思的时候,你可以分类来写每个不同的思路都写成不同的代码,这样评分不会给你扣分的
首先你看题目,这里写着的顺序是花一半,存一半
如果你不明确的话,最好是两个思路都写上去

作者: 耶稣说wō乖    时间: 2013-8-21 10:37
题目要求,是先花再存的,每个存的动作之前都有一个花的动作,所以
  1. package cn.da;

  2. public class SavaMoney {
  3.        
  4.         public static void main(String[] args)
  5.         {
  6.                 save();
  7.         }
  8.        
  9.         public static void save()
  10.         {
  11.                 int day = 0;
  12.                 float money = 0;
  13.                
  14.                 while(money<100)
  15.                 {
  16.                         day++;
  17.                        
  18.                         money+=10;
  19.                         if(day%7==0)
  20.                                 money=money/2;
  21.                         System.out.print("第"+day+"天");
  22.                         System.out.println("最后存了"+money+"元");
  23.                 }
  24.                
  25.         }
  26. }
复制代码
显示结果为:
第1天最后存了10.0元
第2天最后存了20.0元
第3天最后存了30.0元
第4天最后存了40.0元
第5天最后存了50.0元
第6天最后存了60.0元
第7天最后存了35.0元
第8天最后存了45.0元
第9天最后存了55.0元
第10天最后存了65.0元
第11天最后存了75.0元
第12天最后存了85.0元
第13天最后存了95.0元
第14天最后存了52.5元
第15天最后存了62.5元
第16天最后存了72.5元
第17天最后存了82.5元
第18天最后存了92.5元
第19天最后存了102.5元

作者: 许云龙    时间: 2013-8-21 14:10
  1. public class ClassIs11 {
  2.         public static void main(String[] args)
  3.         {
  4.                 double money=0;
  5.                 int day =0;
  6.                 boolean flag =false;
  7.                 while(!flag)
  8.                 {               
  9.                         money/=2; //每七天用掉一般
  10.                         for(int y =0;y<7;y++)
  11.                         {
  12.                                 day++;
  13.                                 money+=10; //每天存10元
  14.                                 if(money>=100)
  15.                                 {
  16.                                         flag =true;
  17.                                         break;
  18.                                 }       
  19.                         }       
  20.                 }       
  21.                 System.out.println(day);
  22.         }
  23. }
  24. //结果是14天,且小明存了105元。
复制代码

作者: 张云飞    时间: 2013-8-21 19:40
本帖最后由 张云飞 于 2013-8-21 19:42 编辑

可能我理解的有问题?看到你的题先自己做了一下,结果是14。再看看你的疑问,也确实存在,这要看你怎么理解了。主要是理解最后一句话“多少天能存够100元”——(这样导致的不同之处:)
意思上表现在:是指必须一天结束?还是无论什么时候只要存够即可?
程序上表现在:主要是在哪里取断点。

我做的时候是按第二种想法,他问多少天能存够,那只要存够就算啊。每天先存10元,之后再考虑是否是7天的整数倍;如果是那再“把所有存款花掉一半”(当然包括今天的10元;再者如果此处你理解为包括当天存的10元,那就默认是这种处理了)。所以判断是否存够10元的点应该是:每天存10元之后。故我是这么玩的:
  1. public class Test{
  2.         public static void main(String args[]){
  3.                 int money = 0;
  4.                 int day = 1;
  5.                 while(money < 100){
  6.                         money += 10;//存钱
  7.                         //检查目前所存钱是否够100元
  8.                         if(money >= 100){
  9.                                 System.out.println(day);
  10.                                 return;
  11.                         }
  12.                         if(day % 7 ==0){
  13.                                 money = money/2;
  14.                         }
  15.                         day++;
  16.                 }
  17.         }
  18. }
复制代码
其实这样改  “小明需要多少天后,才能存够100元”,应该就木有争议了。




作者: 老衲玩IT    时间: 2013-8-24 14:57
注意:楼上的同学忽略了,每隔第7天不花10元,而是只花总数的一半,老衲在此补充了一下。
  1. package com.itheima;

  2. public class Test10 {
  3.         /**
  4.          * 第十题:小明的妈妈每天会给他20元零花钱,
  5.          * 小明每天花一半存一半,每过7天小明又会把所有存款花掉一半,
  6.          * 请编程计算小明需要多少天才能存够100元?<div>         *注意:楼上的同学忽略了,每隔第7天不花10元,而是总数的一半,
  7.          */
  8.         public static void main(String[] args) {
  9.                 saveMoney();
  10.         }
  11.         
  12.         //定义一个方法,用来获得存钱数
  13.         public static void saveMoney(){
  14.                 int in=20;//每天得到的钱数
  15.                 int out=-10;//花费
  16.                 double sum=0;//总钱数
  17.                 int day=1;//天数
  18.                 while(sum<=100){
  19.                         sum+=in;
  20.                         //当总钱数大于等于100的时候,跳出循环
  21.                         if(sum>=100){
  22.                                 break;
  23.                         }
  24.                         //当天数对7求余等于0的时候,总钱数减半
  25.                         if(day%7==0){
  26.                                 sum/=2;
  27.                         }else{<div>                                sum+=out;
  28. <div>                        }      
  29.                         day++;//天数自增加一<div>                        try{</div><div>                                Thread.sleep(1000*60*60*24);</div><div>                        }catch(Exeption e){</div><div>                        }
  30.                 }
  31.                 System.out.println("在第"+day+"天,小明存钱"+sum+"元");
  32.         }
  33. }</div></div></div></div>
复制代码

作者: HM张博文    时间: 2013-8-24 15:34
正确答案是19天哦
作者: 一碗小米周    时间: 2013-9-29 15:19
请问楼主这题答案到底是多少呢?我手算是13天,但是编程算是19天啊。到底是多少呢?求解。
作者: 血剑无痕    时间: 2013-9-29 22:27
package it.aoyun.io;  public class Testdemo {          public static void main(String[] args) {                 // TODO Auto-generated method stub                 /*                  * 第十题:小明的妈妈每天会给他20元零花钱,          * 小明每天花一半存一半,每过7天小明又会把所有存款花掉一半,          * 请编程计算小明需要多少天才能存够100元?          *           * 分析过程是:          *  1   2   3  4   5  6   7.....           *  10  10 10 10  10 10   35                   *                    * */                 //代码实现的过程是:                 int m2=10;                  for(int day=1;day<100;)                  {                          day++;                    if((day%7)==0)                    {                             m2=m2+10;                           m2=(m2/2);                    }                     else                       {                                                                                       m2=m2+10;                       }                                           if(m2>=100)                     {                                                          System.err.println(day);                             break;                     }                  }         }  }
作者: 风悠悠    时间: 2013-9-30 17:09
本帖最后由 风悠悠 于 2013-9-30 17:15 编辑

public static void main(String[] args) {
           System.out.println(day1());    //第一种19天,第7天先用10元,再减半。
           System.out.println(day2());   //第二种13天,第7天加上20元再减半。
}

public static int day1(){    // 19天的算法
            int day=1;
            int sum=0;
            while(sum<100){
                        sum+=10;
                        if(day%7==0)
                                    sum=sum/2;
                        day++;
            }
            return day-1;
}

public static int day2(){      //13天的算法
            int day=1;
            int sum=0;
            while(sum<100){
                          if(day%7==0){
                                    sum+=20;
                                    sum=sum/2;
                         }
                          else
                                    sum+=10;
                         day++;
            }
            return day-1;
}

反正也就这2种,不是13天就是19天,就看对题目的理解了。



作者: 路边小色狼    时间: 2013-9-30 19:58
应该是19天,因为他说的是存够,第13天虽然大于100块了,不过那不是存的。
里面还有10块是用来吃肉肉的,总不能饿死吧{:soso_e121:}
作者: 陈钦涛    时间: 2013-10-1 23:30
小明真幸福...
作者: Household    时间: 2013-12-4 17:14
第1天最后存了10.0元
第2天最后存了20.0元
第3天最后存了30.0元
第4天最后存了40.0元
第5天最后存了50.0元
第6天最后存了60.0元
当第七天时,应该是进的20元+前面的60元,共80元,再花去一半吧,那天他吃肉肉特多,花了平时的四倍啦!!
           while(sum<100){
                        sum+=10;
                        if(day%7==0)
                                    sum=(sum+20)/2;
                        day++;
……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2