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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lwh316658735 发表于 2015-1-29 15:12
总结的公式    return (n%3==0)?(n-n/3+1) : (n-n/3)

很厉害,不知道你是怎么想的,是先拿出一瓶再三瓶一组的考虑,然后只是在公式上变了一下;还是直接就从三瓶一组考虑的.求思路
回复 使用道具 举报
来看看!
回复 使用道具 举报
本帖最后由 怪人长 于 2016-3-18 12:45 编辑

分析:
         * 1.变量的分析:若一次购买一瓶可乐,则购买次数即购买可乐的瓶数,记为 count;
         *                          因为一人一瓶可乐,所以手里剩下的可乐数即够喝的人数,记为  p;
         *                         还有一个关键变量,即瓶盖的数量,记为  k;
         * 2.过程的分析:假设我们一瓶一瓶的不停的购买可乐,每次购买计数增加1,当拥有3个瓶盖时,满足条件兑一瓶可乐(注意                                    兑的这一瓶也是有瓶盖的),
         *                         继续购买可乐,再次拥有3个瓶盖时,又满足条件再去兑一瓶,如此下去一直到可乐数量够28个的时候就停止
                                    购买。
         * 3.条件的分析:每次购买一瓶可乐当做循环一次,count+1,当满足兑换条件时,即当瓶盖 k=3 时,兑换一瓶可乐,这时候
                                    k重置为1,可乐数量p+1,然后继续循环,直到可乐数量 p=28,跳出循环;
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                 int count = 0;                        // 总共买的可乐数
  4.                 int p = 0;                                // 够喝的人数
  5.                 int k = 0;                                // 瓶盖数
  6.                
  7.                 do {                                        //用循环模拟买可乐的过程
  8.                         count++;
  9.                         p++;                                //够喝的人数增加1
  10.                         k++;                                //可乐数增加1
  11.                         if (k == 3 ) {                //判断,有三个瓶盖的话就去换一瓶可乐!
  12.                                 p++;                        //可乐数增加1
  13.                                 k = 1;                        //瓶盖数变为1
  14.                         }
  15.                 }while(p < 28);//可乐数达到要求的话就跳出循环
  16.                 System.out.println("够28人喝需要买的可乐瓶数为:" + count);
  17.         }
  18. }
复制代码




回复 使用道具 举报
涨姿势了 这样算也行啊
回复 使用道具 举报
20150102 发表于 2015-1-28 21:16
心算后感觉要买19瓶不知道是不是

21
hgjgjhil
回复 使用道具 举报
ZZT 中级黑马 2016-5-11 21:22:45
46#
回复 使用道具 举报
SQQ 中级黑马 2016-6-10 18:18:00
47#
谢谢分享
回复 使用道具 举报
厉害啊!高手真多!
回复 使用道具 举报
liusonglin 来自手机 中级黑马 2016-8-1 13:11:28
49#
可以借:
return (n/3*2+n%3);

return (n-n/3);
注:第二个式子不能写成 2*n/3

不能借:
43楼的代码体现(这个思想比其他人的更容易理解,非常赞!)
回复 使用道具 举报
唉,我算术不好,英语不好,是不是就学不会编程了.....唉,算了,我还是回家种田吧
回复 使用道具 举报
这个 棒棒的
回复 使用道具 举报
我这个思路应该最简单易懂了

欢迎指正
import java.util.Scanner;

public class Test_MaiKeLe {

        /**10--28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
         * @param args
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入人数");
                //人数
                int personNum = sc .nextInt();
                //可乐总数
                int keLe=0;
                //瓶盖数
                int gai =0;
                //买的可乐数
                int mai = 0;
                //当可乐总数比人数少就买一瓶,循环一次,买一瓶可乐总数就增加一瓶
                for (keLe =0 ; keLe < personNum; keLe++) {
                        //买一次,买的可乐就增加一瓶
                        mai++;
                        //盖子增加一个
                        gai++;
                        //当盖子到3个
                        if(gai==3){
                                //我换一瓶可乐
                                keLe++;
                                //三个瓶盖换一瓶可乐之后,手上有一个瓶盖
                                gai=1;
                        }
                }
                System.out.println("需要购买可乐"+mai+"瓶");

        }

}
回复 使用道具 举报
sq_jun 发表于 2015-1-28 23:36
加到总数里面了啊

刚开始进入while循环的时候,n++是什么鬼
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马