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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个题目老师讲过不是很理解:
小芳的妈妈每天给她2.5元钱,她都会存起来,但是,
每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
请问,经过多少天,小芳才可以存到100元钱。
public class 作业9 {
        public static void main(String[] args) {
                int d=1;  
                while((2.5*d-6*d/5)<=100){
                        d++;}
                System.out.println(d);
        }
       
}
上述代码中的6*d/5改成6/5*d为什么后结果不一样,:Q
还有一个问题 我这个代码哪里出了问题 ,为什么和老师的结果不一样:Q

点评

http://catblog.sinaapp.com/archives/47.html  发表于 2015-3-9 15:40

13 个回复

倒序浏览
6*d/5和6/5*d结果不一样很正常啊,因为java的整数除法是求商,不是精确除法,不能适用乘法交换律。比如d=5时,6*d/5=6而6/5*d=5
至于你的代码,你如果想判断某天是不是存钱的第5天或者5的倍数,可以这样写:
  1. 2.5 * d -  6 * (d % 5 == 0 ? 1 : 0)
复制代码
回复 使用道具 举报 1 0
瞬间明白了,太感谢啦:hug:
回复 使用道具 举报
不对吧,我现在算的是哪天能到达100元,你这样用三元相当于只是减去一次6元
回复 使用道具 举报
  1. 2.5*d-6*(d/5)
复制代码

加个括号就是对的
回复 使用道具 举报
先修正下你说的那个问题 、2.5*d-6*d/5 修成 2.5*d-d/5*6或2.5*d-6*(d/5)那么就是while((2.5*d-d/5*6)<=100){
                         d++;}  问题来了   假使第N天的时候d=n,刚好存到100块  那个循环条件也成立,后面d++ 会使d再加一天,输出结果是N+1天  实际只是需要n天就存好了、、  把那个条件<=100 修改成<100 应该就可以了、  我是这么理解的   
回复 使用道具 举报
亲,先乘后除肯定不一样啦
回复 使用道具 举报
仰天长啸 发表于 2015-3-8 23:06
不对吧,我现在算的是哪天能到达100元,你这样用三元相当于只是减去一次6元 ...

三元写对了。能整除取模
回复 使用道具 举报
王振光 发表于 2015-3-9 12:51
三元写对了。能整除取模

取模0 当你是5的倍数时==0时取1其他时候是0
回复 使用道具 举报
int是整数啊 6/5=1 而不是1.2
回复 使用道具 举报
cat73 黑马帝 2015-3-9 14:51:38
11#
本帖最后由 cat73 于 2015-3-9 15:15 编辑

我是不太认可这老师的算法...
这样代码虽然短, 但是很难一眼就看明白 尤其是一些细节上很难一下就想明白
我认为解决这种问题最好的途径就是, 问题里描述了什么事情, 你就实际的让代码去做什么事情, 这样肯定没错, 而且好理解
自己写了段简单的JS代码来解决这个问题(原谅我懒得开Eclipse, 毕竟JS用记事本就能写...)
按F12来打开浏览器控制台, 选择Console标签, 粘贴下面的代码即可执行
  1. //小芳存钱问题的解答 By: Cat73, QQ: 1901803382
  2. !function() {
  3.     //现在有多少钱
  4.     var money = 0;
  5.     //已经经过了几天
  6.     var day = 0;

  7.     //每次循环为一天        
  8.     while(money < 100) {
  9.         //每天给钱数加2.5元
  10.         money += 2.5;
  11.         //每天天数加1
  12.         day++;
  13.         //输出下麻麻给钱后的钱数
  14.         console.log("今天是第 " + day + " 天, 麻麻给了我 2.5 元, 我现在有 " + money + " 元.");
  15.         
  16.         //如果天数为5的倍数 则钱数减6
  17.         if(day % 5 == 0) {
  18.             money -= 6;
  19.             //输出下花钱之后的钱数
  20.             console.log("今天是第 " + day + " 天, 我花掉了 6 元, 我现在有 " + money + " 元.");
  21.         }

  22.         //输出下当天的天数与钱数
  23.         //console.log(day, money);
  24.         console.log("今天是第 " + day + " 天, 我现在有 " + money + " 元.");
  25.     }
  26. }();
复制代码

输出结果:
  1. 今天是第 1 天, 麻麻给了我 2.5 元, 我现在有 2.5 元.
  2. 今天是第 1 天, 我现在有 2.5 元.
  3. 今天是第 2 天, 麻麻给了我 2.5 元, 我现在有 5 元.
  4. 今天是第 2 天, 我现在有 5 元.
  5. 今天是第 3 天, 麻麻给了我 2.5 元, 我现在有 7.5 元.
  6. 今天是第 3 天, 我现在有 7.5 元.
  7. 今天是第 4 天, 麻麻给了我 2.5 元, 我现在有 10 元.
  8. 今天是第 4 天, 我现在有 10 元.
  9. 今天是第 5 天, 麻麻给了我 2.5 元, 我现在有 12.5 元.
  10. 今天是第 5 天, 我花掉了 6 元, 我现在有 6.5 元.
  11. 今天是第 5 天, 我现在有 6.5 元.
  12. 今天是第 6 天, 麻麻给了我 2.5 元, 我现在有 9 元.
  13. 今天是第 6 天, 我现在有 9 元.
  14. 今天是第 7 天, 麻麻给了我 2.5 元, 我现在有 11.5 元.
  15. 今天是第 7 天, 我现在有 11.5 元.
  16. 今天是第 8 天, 麻麻给了我 2.5 元, 我现在有 14 元.
  17. 今天是第 8 天, 我现在有 14 元.
  18. 今天是第 9 天, 麻麻给了我 2.5 元, 我现在有 16.5 元.
  19. 今天是第 9 天, 我现在有 16.5 元.
  20. 今天是第 10 天, 麻麻给了我 2.5 元, 我现在有 19 元.
  21. 今天是第 10 天, 我花掉了 6 元, 我现在有 13 元.
  22. 今天是第 10 天, 我现在有 13 元.
  23. ////////////中间部分省略////////////
  24. 今天是第 70 天, 麻麻给了我 2.5 元, 我现在有 97 元.
  25. 今天是第 70 天, 我花掉了 6 元, 我现在有 91 元.
  26. 今天是第 70 天, 我现在有 91 元.
  27. 今天是第 71 天, 麻麻给了我 2.5 元, 我现在有 93.5 元.
  28. 今天是第 71 天, 我现在有 93.5 元.
  29. 今天是第 72 天, 麻麻给了我 2.5 元, 我现在有 96 元.
  30. 今天是第 72 天, 我现在有 96 元.
  31. 今天是第 73 天, 麻麻给了我 2.5 元, 我现在有 98.5 元.
  32. 今天是第 73 天, 我现在有 98.5 元.
  33. 今天是第 74 天, 麻麻给了我 2.5 元, 我现在有 101 元.
  34. 今天是第 74 天, 我现在有 101 元.
复制代码
回复 使用道具 举报
6*d/5改成6/5*d
首先d是整型;
假设d等于30
6*30/5=180/5=36
6/5*30=1*30=30
回复 使用道具 举报
谢谢大家的回复,现在问题我已经解决这是我的代码
public classtest9 {
        public static void main(String[] args) {
                int d=1;  int mo=0;
                while((2.5*d- mo)<=100){
                        if(d%5==0){
                                mo=6*(d/5);
                        }
                        d++;}
                System.out.println(d);
        }
       
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马