黑马程序员技术交流社区

标题: 关于存够100元的问题 [打印本页]

作者: 不存在的奇迹    时间: 2015-4-14 20:55
标题: 关于存够100元的问题
  1. /**
  2. * 10、 小明的妈妈每天会给他20元零花钱。平日里,小明先花掉一半,再把一半存起来。
  3. *                 每到周日,小明拿到钱后会把所有零花钱花掉一半。
  4. *                 请编程计算,从周一开始,小明需要多少天才能存够100元?
  5. * @author maojunjie
  6. *
  7. */
  8. public class Test10 {
  9.         public static void main(String[] args) {
  10.                 //定义一个记录小明零花钱总和的变量
  11.                 int sum = 0;
  12.                
  13.                 //定义一个天数
  14.                 int day = 0;
  15.                
  16.                 //通过while循环来计算天数
  17.                 while(sum <= 100){
  18.                         day++;
  19.                         if(day%7 != 0){
  20.                                 sum += 10;
  21.                                 System.out.println("小明第"+day+"天存了"+sum+"钱");
  22.                         }else{
  23.                                 sum = (sum+20)/2;
  24.                                 System.out.println("小明第"+day+"天存了"+sum+"钱");
  25.                         }
  26.                 }
  27.                
  28.                 //最后输出天数
  29.                 System.out.println("小明总共花了"+day+"天存够100钱");
  30.         }
  31. }
复制代码

作者: 百思不得解    时间: 2015-4-14 20:55
顶贴来了。
作者: 不存在的奇迹    时间: 2015-4-14 20:57
大家交流一下 这里到13天 钱就已经是100元了 接下去14天 正好是周日 所以(100+20)/2 = 60元
作者: 王振光    时间: 2015-4-14 21:01
顶。。。。。
作者: 不存在的奇迹    时间: 2015-4-14 21:09
王振光 发表于 2015-4-14 21:01
顶。。。。。

请教下 你的技术分怎么得到的吗? xiexie
作者: 缤纷落叶    时间: 2015-4-14 21:13
果然是牛人这种问题都能实现,好谢幕
作者: 君嘘    时间: 2015-4-14 21:34
你不是已经做出来了嘛。。。
作者: 18561271203    时间: 2015-4-15 11:11
牛。。。。。。。。
作者: 不存在的奇迹    时间: 2015-4-15 18:42
君嘘 发表于 2015-4-14 21:34
你不是已经做出来了嘛。。。

但是13天的时候也是100块 想问下为什么不是13  
作者: b277967086    时间: 2015-4-15 19:35
不错,听详细的
作者: yxnheima    时间: 2015-4-15 20:19
看不太懂,但还是顶一个。
作者: 君嘘    时间: 2015-4-15 20:46
本帖最后由 君嘘 于 2015-4-17 14:50 编辑
不存在的奇迹 发表于 2015-4-15 18:42
但是13天的时候也是100块 想问下为什么不是13

哦 原来如此,我之前都没运行过你的代码。
你是说为啥得出的结果是第19天而不是第13天对吧。

因为的while的循环条件写错了,  sum<=100的时候循环,代表即使存够了100也会再运行。

第13天存够100了,但是因为sum=100的时候也循环,所以就继续第14天。
而第14天刚刚好是星期天所以要花去一半
所以sum变成了60. 那么60回去给while一判断,还是<=100,所以又继续循环了。

你程序运行结果第19天存够了100也不是真正的结果,而是因为第19天的钱已经超过了100。
真正存够100的是第18天……
然后满足循环条件继续运行::
此时day为19
sum又加了10,变成了110.
再次循环的时候不满足条件,所以循环结束了。而你最终得出的结果也错误了。

改动很简单,你把while的条件改成sum==100就可以了

作者: 814326663    时间: 2015-4-15 20:54
君嘘 发表于 2015-4-15 20:46
哦 原来如此,我之前都没运行过你的代码。
你是说为啥得出的结果是第19天而不是第13天对吧。

果然大神 理解了  我也运行了这个代码 没看出来 可能是因为刚刚开始自学吧
作者: AndroidM    时间: 2015-4-15 21:05
支持。。。。。。。。。。。。。。。。。。。。。。。。
作者: 不存在的奇迹    时间: 2015-4-16 21:47
君嘘 发表于 2015-4-15 20:46
哦 原来如此,我之前都没运行过你的代码。
你是说为啥得出的结果是第19天而不是第13天对吧。

首先谢谢你 这么详细 我都理解都说的  我也知道 13天 跟 19天的区别在于 判断条件100那里  我其实疑惑的是  为什么这个题目的答案不是13天  而是19天   因为根据题意  13天已经满足100元了  
作者: Richard926    时间: 2015-4-16 22:26
顶贴。。。。
作者: 你好明天    时间: 2015-4-16 22:40
额 我表示看不懂代码
作者: 君嘘    时间: 2015-4-17 00:17
不存在的奇迹 发表于 2015-4-16 21:47
首先谢谢你 这么详细 我都理解都说的  我也知道 13天 跟 19天的区别在于 判断条件100那里  我其实疑惑的 ...

你没认真看我的回复吧
作者: sisel    时间: 2015-4-17 09:15
没有判断到达100元的部分
作者: long_yihuan    时间: 2015-4-17 09:17
路过。。。。。。
作者: Zack    时间: 2015-4-17 09:45
君嘘 发表于 2015-4-15 20:46
哦 原来如此,我之前都没运行过你的代码。
你是说为啥得出的结果是第19天而不是第13天对吧。

我的天怎么能这么改,sum != 100条件下怎么保证刚好存够100呢?这样就跳不出来了同学
作者: 君嘘    时间: 2015-4-17 14:49
Zack 发表于 2015-4-17 09:45
我的天怎么能这么改,sum != 100条件下怎么保证刚好存够100呢?这样就跳不出来了同学 ...

我打错了。。。是sum==100。。。。我现在就去改了。。。
作者: major2015    时间: 2015-4-17 15:15
请问你怎么理解题目的,判断是否大于100元是写在得了20元之后,还是扣除了零花钱之后???
作者: 不存在的奇迹    时间: 2015-4-17 17:19
major2015 发表于 2015-4-17 15:15
请问你怎么理解题目的,判断是否大于100元是写在得了20元之后,还是扣除了零花钱之后??? ...

我的程度 第13天 是100元  这个100元已经是得了20 花去10元 之后的结果
作者: Zack    时间: 2015-4-18 00:15
君嘘 发表于 2015-4-17 14:49
我打错了。。。是sum==100。。。。我现在就去改了。。。

sum == 100也不对啊,那一天如果不是100的整数倍,必须要用大于小于号 同学你觉得呢
作者: 君嘘    时间: 2015-4-18 02:53
本帖最后由 君嘘 于 2015-4-18 02:58 编辑
Zack 发表于 2015-4-18 00:15
sum == 100也不对啊,那一天如果不是100的整数倍,必须要用大于小于号 同学你觉得呢 ...

有道理,存了101也算存够100~~~
恰好存了100就用==
存够100就用>咯,反正就是不能<=或者>=
同学你还有什么问题么,发现了我的错误直接说出来就行了。别又反过来问我

作者: lslkkk    时间: 2015-4-18 07:45
这题今天研究研究




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