黑马程序员技术交流社区

标题: 有没有一段代码会让你鼓掌叫绝?! [打印本页]

作者: God’s favoure    时间: 2014-10-24 21:17
标题: 有没有一段代码会让你鼓掌叫绝?!
package day07;
import java.util.*;
/*28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,
*                 那么要买多少瓶可乐,够28人喝?假如是50人,
*                 又需要买多少瓶可乐?(需写出分析思路)*/
//每当瓶子数等于3的时候,那么,就可以得到一个瓶  a/3
public class Test10{
        public static void main(String[] age){
                System.out.println("请输入需要喝可乐的人数:");
                Scanner sc = new Scanner(System.in);
                int man = sc.nextInt();
                Integer drinked = 0;//为饮料赋初始值0
                Integer caps = 0;//为瓶盖赋初始值0
                Integer need = 0;//为需要多少瓶赋值
                while (drinked < man) {
                        need++;
                        drinked++;
                        caps++;
                        if (caps == 3) {
                                drinked++;
                                caps = 1;
                        }
                }
                System.out.println(need);
        }
}
这段代码我看了以后,真的有种感动,太纯粹,当我都在苦苦的思考各种算法得时候,看到了这段,只是很简单的按照题目基本上是描述出来的代码的时候,大家能体会到我的震惊甚至带有一些感动么?
作者: 付江涛    时间: 2014-10-24 21:54
哈哈,这也算是编程的乐趣所在,那种豁然开朗的感觉,,,无法形容{:3_53:}
作者: qinjingbo    时间: 2014-10-24 22:02
恩,不错。
作者: 陈云阳    时间: 2014-10-24 22:06
n/3*2+n%3   这段代码就是一道数学题,一行就搞定。n代表总人数
作者: falonsokaka914    时间: 2014-10-24 22:13
震惊了,这.........无法形容
作者: 马个了黑_邓    时间: 2014-10-24 22:20
真是犀利
作者: Nullifier    时间: 2014-10-24 22:29
酷爆了这算法{:3_55:}
作者: 冥夜    时间: 2014-10-25 01:02
陈云阳 发表于 2014-10-24 22:06
n/3*2+n%3   这段代码就是一道数学题,一行就搞定。n代表总人数

是数学题,但是解决问题的思路不一样,就好像枚举和推理都能得出结论。对于人来说,在复杂到一定程度上推理更快,但是对于计算机来说计算机有极快的运行速度,所以反而枚举法更快,在计算机用枚举法找到答案的时候人可能还在纠结着思路的正确与否。
作者: 郑飞    时间: 2014-10-25 05:17
陈云阳 发表于 2014-10-24 22:06
n/3*2+n%3   这段代码就是一道数学题,一行就搞定。n代表总人数

不一样 楼主发的代码 大妈都能看懂 却解决了问题
作者: axing110    时间: 2014-10-25 07:07
感谢楼主分享
作者: 戏言丶    时间: 2014-10-25 07:25
有些代码就是在你百思不得其解的时候眼前一亮
作者: 戏言丶    时间: 2014-10-25 08:25
陈云阳 发表于 2014-10-24 22:06
n/3*2+n%3   这段代码就是一道数学题,一行就搞定。n代表总人数

你这个也并不完全对,如果是3的倍数下这个就不适合,此时瓶数要加1
作者: 黄小橙    时间: 2014-10-25 08:52
看看。。。。。。。。
作者: lylHAHA    时间: 2014-10-25 09:03
之前也看过这道题,找了些规律,看分享的,感觉简单多了,
作者: 王世虎    时间: 2014-10-25 09:28
感谢楼主分享 ~~学习了
作者: 陈行    时间: 2014-10-25 10:20
个人感觉这种问题  用递归思路比较清晰把
作者: 君行    时间: 2014-10-25 10:26
.................
作者: 陈云阳    时间: 2014-10-25 22:20
郑飞 发表于 2014-10-25 05:17
不一样 楼主发的代码 大妈都能看懂 却解决了问题

楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一瓶饮料,喝完把盖子还给老板就好。   所以每三人为一个小组 只需买两瓶饮料,不足三人的按人头买饮料,n/3*2 就是算出全部的3人小组需要买多少瓶水 ,n%3,就是算出,不足3人的 零散人头数,   相加就得出最少的饮料瓶数
作者: 郑飞    时间: 2014-10-25 22:30
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

这么一说是很清晰 当时做题的时候就没想到用表达式 学习了
作者: qq8921310    时间: 2014-10-25 22:31
这个必须赞一个。
作者: qq8921310    时间: 2014-10-25 22:32
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

确实很简练,
作者: ジ旋律    时间: 2014-10-25 22:37
哈哈,数学很有意思滴
作者: 执着的桶牛    时间: 2014-10-25 23:16
敲代码还是思路最重要啊!
作者: 沈木生    时间: 2014-10-26 03:07
真心太感动了。算法帝级别
作者: 践行渐远    时间: 2014-10-26 12:36
一道数学题
作者: noiary    时间: 2014-10-27 16:27
  1. /*28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,
  2. *                 那么要买多少瓶可乐,够28人喝?假如是50人,
  3. *                 又需要买多少瓶可乐?(需写出分析思路)
  4. */

  5. public class Test {

  6.         public static void main(String[] args) {
  7.                 int pNum = 4;
  8.                 System.out.println(getNum(pNum));
  9.         }
  10.        
  11.         /*思路:买3送1,那么每增加4个人实际上只增加了3瓶可乐*/
  12.         public static int getNum(int pNum) {
  13.                
  14.                 /*
  15.                  x=购买数量中不被3整出的部分,也就是无法参加满三赠一的部分人,
  16.                  值可能是0(被4整除,那么瓶数也一定是3的整数倍),1,2,3;
  17.                  不管是几,这一部分人的可乐都属于实际购买可乐数量的一部分,所以最后公式中要加上.
  18.                 */
  19.                 int x = pNum % 4;  
  20.                
  21.                
  22.                 /*
  23.                  y=要送的瓶数;3个人送1瓶就是4瓶,每4个人中有一个人是送的,所以用人数/4
  24.                 */
  25.                 int y = pNum / 4;
  26.                
  27.                 /*
  28.                  因为y是送的瓶数,那么每送一瓶其实就是买了3瓶,
  29.                  所以用3*y是实际买的3的整数倍瓶数(不包含送的),再加上x,就等于实际购买数量.
  30.                 */
  31.                 return (3 * y + x);
  32.         }
  33. }
复制代码

作者: axing110    时间: 2014-10-29 08:25
晕死,老板会借吗。我还是觉得21比较好,考试我就是用递归算的,结果21,还是这样好
作者: 含着泪微笑    时间: 2014-10-29 09:37
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

这种办法可行性有点低,因为这样老板就会少卖一瓶,那一瓶的中间利润他赚不到了
作者: 含着泪微笑    时间: 2014-10-29 09:47
noiary 发表于 2014-10-27 16:27

所有的人同时喝时,这样是可行的;如果可以不同时喝时,送的7瓶还可以换2瓶,那样要买的瓶数减2了,或者去补后边不足三瓶的余数
作者: FlyFish    时间: 2014-10-31 11:59
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

这个见解好
作者: 姜浩    时间: 2014-10-31 12:39
郑飞 发表于 2014-10-25 05:17
不一样 楼主发的代码 大妈都能看懂 却解决了问题

要不要这么直白,哈哈
作者: 陈云阳    时间: 2014-10-31 12:54
含着泪微笑 发表于 2014-10-29 09:37
这种办法可行性有点低,因为这样老板就会少卖一瓶,那一瓶的中间利润他赚不到了 ...

你这什么思维,老师给你出一道数学题,往一个池子注满水,需要3小时注满,放水需要4小时才能放完,如果一边注水一边放水需要多久能注满池子?    难道这时你还要考虑哪个神经病会做出一边注水一边放水,浪费水资源的行为吗
作者: 十万一千    时间: 2014-10-31 13:50
嘻嘻,被你发现了。。。




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