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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© God’s favoure 中级黑马   /  2014-10-24 21:17  /  3485 人查看  /  32 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
        }
}
这段代码我看了以后,真的有种感动,太纯粹,当我都在苦苦的思考各种算法得时候,看到了这段,只是很简单的按照题目基本上是描述出来的代码的时候,大家能体会到我的震惊甚至带有一些感动么?

评分

参与人数 2技术分 +2 收起 理由
杨佳名 + 1 赞一个!
敏敏好学 + 1 赞一个!

查看全部评分

32 个回复

正序浏览
嘻嘻,被你发现了。。。
回复 使用道具 举报
含着泪微笑 发表于 2014-10-29 09:37
这种办法可行性有点低,因为这样老板就会少卖一瓶,那一瓶的中间利润他赚不到了 ...

你这什么思维,老师给你出一道数学题,往一个池子注满水,需要3小时注满,放水需要4小时才能放完,如果一边注水一边放水需要多久能注满池子?    难道这时你还要考虑哪个神经病会做出一边注水一边放水,浪费水资源的行为吗
回复 使用道具 举报
姜浩 中级黑马 2014-10-31 12:39:07
31#
郑飞 发表于 2014-10-25 05:17
不一样 楼主发的代码 大妈都能看懂 却解决了问题

要不要这么直白,哈哈
回复 使用道具 举报
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

这个见解好
回复 使用道具 举报

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

这种办法可行性有点低,因为这样老板就会少卖一瓶,那一瓶的中间利润他赚不到了
回复 使用道具 举报
晕死,老板会借吗。我还是觉得21比较好,考试我就是用递归算的,结果21,还是这样好
回复 使用道具 举报
noiary 高级黑马 2014-10-27 16:27:57
26#
  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. }
复制代码
回复 使用道具 举报
一道数学题
回复 使用道具 举报
真心太感动了。算法帝级别
回复 使用道具 举报
敲代码还是思路最重要啊!
回复 使用道具 举报
ジ旋律 来自手机 中级黑马 2014-10-25 22:37:09
22#
哈哈,数学很有意思滴
回复 使用道具 举报
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

确实很简练,
回复 使用道具 举报
这个必须赞一个。
回复 使用道具 举报
郑飞 高级黑马 2014-10-25 22:30:31
19#
陈云阳 发表于 2014-10-25 22:20
楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一 ...

这么一说是很清晰 当时做题的时候就没想到用表达式 学习了
回复 使用道具 举报
郑飞 发表于 2014-10-25 05:17
不一样 楼主发的代码 大妈都能看懂 却解决了问题

楼主只是加了注释,我这算法的思路也很简单 , 买两瓶饮料,就有两个瓶盖,然后再向老板借一个瓶盖,换一瓶饮料,喝完把盖子还给老板就好。   所以每三人为一个小组 只需买两瓶饮料,不足三人的按人头买饮料,n/3*2 就是算出全部的3人小组需要买多少瓶水 ,n%3,就是算出,不足3人的 零散人头数,   相加就得出最少的饮料瓶数
回复 使用道具 举报
君行 中级黑马 2014-10-25 10:26:56
17#
.................
回复 使用道具 举报
陈行 高级黑马 2014-10-25 10:20:04
16#
个人感觉这种问题  用递归思路比较清晰把
回复 使用道具 举报
感谢楼主分享 ~~学习了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马