黑马程序员技术交流社区

标题: 大牛,帮我看一下这个程序。 [打印本页]

作者: wuchuang1992    时间: 2013-10-29 13:24
标题: 大牛,帮我看一下这个程序。
小明的妈妈每天会给他20元零花钱。平日里,小明先花掉一半,再把一半存起来。每到周日,小明拿到钱后会把所有零花钱花掉一半。
请编程计算,从周一开始,小明需要多少天才能存够100元?
  1. public class Test{
  2.         public static void main(String args[]){
  3.                
  4.                 int sum = 0;
  5.                 int day = 1;
  6.                
  7.                 while(sum<=100){
  8.                         sum += 20;
  9.                        
  10.                         //星期日,花一半
  11.                         if(day%7==0)
  12.                                 sum = sum/2;
  13.                         else                               
  14.                                 //星期1-6,花一半
  15.                                 sum = sum/2;
  16.                         day++;
  17.                 }
  18.                
  19.                 System.out.println(day--);
  20.         }
  21. }
复制代码


作者: 零下五度的水    时间: 2013-10-29 13:46
明显是理解问题,平时是花掉20块钱的一半,就是每天花10块钱
作者: 靓仔    时间: 2013-10-29 14:02
星期一到星期六的钱不应该是sum=sum/2,sum=sum/2代表你把存的钱花一半,而不是平日花一半。所以说:平时里他每天只存10元,星期天存20元,最后在花去总得存钱数一半。
程序可以这样写
public class Test{
        public static void main(String args[]){
               
                int sum = 0;
                int day = 1;
                while(sum<=100){
                        sum += 10;//星期一到星期六存的钱
                        
                        if(day%7==0)
                                sum=sum+20;//星期天的钱数为20,没有花
                                sum = sum/2;
                        day++;
                }
               
                System.out.println("存入100的天数为: "+day);
        }
}
这是我的理解!
作者: 李文帅    时间: 2013-10-29 14:12
你写的代码存在问题,题目的意思是周一到周六每天有20元,每天花掉10元,所以周一到周六每天能剩10元,而你的代码
  1. else                                

  2. 14.                                //星期1-6,花一半

  3. 15.                                sum = sum/2;
复制代码
代表的意思是花掉身上所有钱的一半
还有
  1. //星期日,花一半

  2. 11.                        if(day%7==0)

  3. 12.                                sum = sum/2;
复制代码
周末的时候也会有20元零用钱,周末所剩的钱应该是以前身上所有的钱加上今天的20元,然后在除以2 sum = (sum+20)/2;
正确代码应该是这样:
  1. 01.public class Test{

  2. 02.        public static void main(String args[]){

  3. 03.               

  4. 04.                int sum = 0;

  5. 05.                int day = 1;

  6. 06.               

  7. 07.                while(sum<=100){

  8. 08.                        sum += 20;

  9. 09.                        

  10. 10.                        //星期日,花一半

  11. 11.                        if(day%7==0)

  12. 12.                                sum = (sum+20)/2;

  13. 13.                        else                                

  14. 14.                                //星期1-6,花一半

  15. 15.                                sum = sum + 20/2;

  16. 16.                        day++;

  17. 17.                }

  18. 18.               

  19. 19.                System.out.println(day--);

  20. 20.        }

  21. 21.}
复制代码

作者: FFF    时间: 2013-10-29 14:31
  1.                         
  2.                                //星期日,花一半     
  3.                                if(day%7==0)
  4.                                 sum = sum/2;
  5.                         else                                
  6.                                 //星期1-6,花一半
  7.                                 sum = sum/2;
  8.                         day++;
复制代码
你这样写是不是错了?星不星期天没有意义啊?都是Sun=Sun/2

修改后的代码如下:
  1. while(sum<=100){
  2.                         //sum += 20;
  3.                         
  4.                         //星期日,花一半
  5.                         if(day%7==0)
  6.                                 sum = (sum+20)/2;
  7.                         else                                
  8.                                 //星期1-6,花一半
  9.                                 sum = sum+20/2;
  10.                         day++;
  11.                   
  12.                 }
复制代码
可能存在理解不正确的地方!
作者: FFF    时间: 2013-10-29 14:34
李文帅 发表于 2013-10-29 14:12
你写的代码存在问题,题目的意思是周一到周六每天有20元,每天花掉10元,所以周一到周六每天能剩10元,而你 ...

你的是不是也存在错误?
每天都给40块了。
sun+=20
然后sun又在while里又sun=sun+20/2
作者: 星星点灯    时间: 2013-10-29 14:48
/*
题目:
小明的妈妈每天会给他20元零花钱。平日里,小明先花掉一半,再把一半存起来。
每到周日,小明拿到钱后会把所有零花钱花掉一半。
请编程计算,从周一开始,小明需要多少天才能存够100元?

疑问:存够100元的时刻——是指最后那天拿到钱的时刻,还是花掉之后的时刻
如果是指花掉之后,程序如下:
*/
//demo.java
public class demo
{       
          public static void main(String[] args)
        {
                 int sum=0;
                 int day=1;
                 while (sum<=100)
                 {
                         //星期天
                        if (day%7==0)
                        {
                                sum=sum+20;//星期天先得20,再花掉总数的一半
                                sum=sum/2;
                        } else {
                                sum=sum+10;//周一到周六
                        }
                        //System.out.println("今是第 "+day+" 天");
                        //System.out.println("截止到本日钱的总数为——"+sum);
                        if (sum==100) break;//如果最后一天恰好为100,就跳出循环,否则会多循环一次
                        day++;
        }
                 System.out.println("存入100的所需的天数为: "+day);
        }
}  
作者: 星星点灯    时间: 2013-10-29 14:49
  1. /*
  2. 题目:
  3. 小明的妈妈每天会给他20元零花钱。平日里,小明先花掉一半,再把一半存起来。
  4. 每到周日,小明拿到钱后会把所有零花钱花掉一半。
  5. 请编程计算,从周一开始,小明需要多少天才能存够100元?

  6. 疑问:存够100元的时刻——是指最后那天拿到钱的时刻,还是花掉之后的时刻
  7. 如果是指花掉之后,程序如下:
  8. */
  9. //demo.java
  10. public class demo
  11. {       
  12.           public static void main(String[] args)
  13.         {
  14.                  int sum=0;
  15.                  int day=1;
  16.                  while (sum<=100)
  17.                  {
  18.                          //星期天
  19.                         if (day%7==0)
  20.                         {
  21.                                 sum=sum+20;//星期天先得20,再花掉总数的一半
  22.                                 sum=sum/2;
  23.                         } else {
  24.                                 sum=sum+10;//周一到周六
  25.                         }
  26.                         //System.out.println("今是第 "+day+" 天");
  27.                         //System.out.println("截止到本日钱的总数为——"+sum);
  28.                         if (sum==100) break;//如果最后一天恰好为100,就跳出循环,否则会多循环一次
  29.                         day++;
  30.         }
  31.                  System.out.println("存入100的所需的天数为: "+day);
  32.         }
  33. }  
复制代码

作者: 李文帅    时间: 2013-10-29 14:55
FFF 发表于 2013-10-29 14:34
你的是不是也存在错误?
每天都给40块了。
sun+=20

不好意思,我直接复制他的代码,只改了下面的代码,忘了把上面的代码去掉,马虎了....:lol
作者: 李文帅    时间: 2013-10-29 14:59
纠正一下,上面的代码应该是下面的,刚才直接复制楼主的代码,只改了下面的代码,忘了把 'sum +=20;'这句代码给注释掉,抱歉
  1. 01.public class Test{

  2. 02.        public static void main(String args[]){

  3. 03.               

  4. 04.                int sum = 0;

  5. 05.                int day = 1;

  6. 06.               

  7. 07.                while(sum<=100){

  8. 08.                       // sum += 20;

  9. 09.                        

  10. 10.                        //星期日,花一半

  11. 11.                        if(day%7==0)

  12. 12.                                sum = (sum+20)/2;

  13. 13.                        else                                

  14. 14.                                //星期1-6,花一半

  15. 15.                                sum = sum + 20/2;

  16. 16.                        day++;

  17. 17.                }

  18. 18.               

  19. 19.                System.out.println(day--);

  20. 20.        }

  21. 21.}
复制代码

作者: wuchuang1992    时间: 2013-10-29 15:29
星星点灯 发表于 2013-10-29 14:49

谢谢,嘿嘿 ,我会了
作者: 帅气的冬瓜    时间: 2013-10-29 17:20
怎么看着好像是  day++呢
作者: To    时间: 2013-10-30 00:07
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 李新辉    时间: 2013-10-30 16:00
仇邓强 发表于 2013-10-30 00:07
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释 ...

苦逼的版主……
辛苦了……
作者: --_.Is’攸稀    时间: 2013-10-30 16:17
这样代码应该是错的,在星期1-6,花一半,不应那样写,要不都一样了,应该是sum=sum-10;因为他只是每天花掉了10块而已
作者: 李新辉    时间: 2013-10-30 16:32
本帖最后由 李新辉 于 2013-10-30 17:15 编辑
  1. class DayNum
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         int sum=0;
  6.         int day=0;//存完钱才是天数day++  ===>  day=0+1,所以这里初始化为0
  7.         int M=20;
  8.         while(sum<100)//当小明存够100就跳出循环
  9.         {
  10.             if(day%7==0)
  11.                 sum=(sum+M)/2;//周日存入20元并花掉全部的一半
  12.             else
  13.                 sum+=M/2;//周一到周六存入10元
  14.             day++;
  15.             }
  16.                 System.out.println("当小明存够100元是第 "+day+" 天");
  17.         }
  18. }
复制代码
这是我按照楼主的要求写的代码
看楼主能否看明白……
大家多交流……




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