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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Test10 {
  2.         public static void main(String[] args) {
  3.                 int people = 19;
  4.                 int cap = 0;
  5.                 int buy = 0;
  6.                
  7.                 for (int person = 1; person <= people; person ++) {
  8.                         if (cap < 3) {
  9.                                 buy ++;
  10.                                 cap ++;
  11.                         }
  12.                         if (cap == 3) {
  13.                                 cap = 0;
  14.                                 // 只要有 3 个瓶盖,就可以少买 1 次
  15.                                 buy --;
  16.                         }
  17.                 }
  18.                 System.out.println(buy);
  19.         }
  20. }
复制代码
回复 使用道具 举报
学习学习
回复 使用道具 举报
不错!
回复 使用道具 举报
lpf870826 发表于 2015-1-28 10:26
思路:  我觉的还是这样好理解一点
* 方法一: 3个瓶盖可以换一瓶,那么相当于3人只需要两瓶就够了。
*  ...

我也是这么干的
回复 使用道具 举报

if(n>28)
这里不能大于等于28

因为已经等于28了 说明每个都已经有一瓶可乐了  就不能再执行了  
你把28改成50就有bug了
回复 使用道具 举报
20150102 发表于 2015-1-28 21:16
心算后感觉要买19瓶不知道是不是
  1. public class Test11 {
  2.         /*
  3.          * 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  4.          * 假如是50人,又需要买多少瓶可乐?
  5.          */
  6.         public static void main(String[] args)
  7.         {
  8.                 coke(28);               
  9.         }
  10.         public static void coke(int personNum)
  11.         {        //用于计算兑换的可乐瓶数
  12.                 int count = 0;
  13.                 //总共要购买的可乐数
  14.                 int num = 0;
  15.                 //兑换的可乐跟需要买可乐的数量
  16.                 int sum = 0;
  17.                 while(true)
  18.                 {
  19.                         if(sum != personNum)
  20.                         {
  21.                                 num++;
  22.                                 if(num % 3 == 0)
  23.                                 {
  24.                                         count++;
  25.                                 }
  26.                                 sum = num + count;       
  27.                         }                                       
  28.                         else
  29.                         {                               
  30.                                 break;
  31.                         }
  32.                 }
  33.                 System.out.println(count+"+"+num);
  34.         }
  35. }
复制代码


我算出来是 50人 买38瓶 送12瓶
28人是 买21瓶 送7瓶
回复 使用道具 举报
* 分析思路:1、因为每买两瓶可乐,就意味着够三个人喝的了;
*                   2、通过while循环来记录需要买的可乐瓶数(即循环次数),同时用count来记录每次循环后真正有多少可乐可喝,
*                         判断条件为count小于喝可乐的人数;
*                   3、循环内部设计:每次循环count都先加1,如果碰到被2整除的循环次数多加一次1,用i来标记循环次数,所以每次循环加1,
*                          但因为i从1开始,所以最后真正的循环次数为i-1,这里的设计是为了避免i==0时count会错误加1的情况;
*                   4、根据分析思路去规范代码。
回复 使用道具 举报

RE:你写的代码还是不怎么准确,当你有7个人的时候,结果显示是购买5瓶。那么问题来了,买5瓶只够兑换一瓶,也就是5+1才6瓶,7个人明显不够嘛
回复 使用道具 举报

当n=0时n%3=0,调整顺序才行:lol
回复 使用道具 举报
lanbo 中级黑马 2015-6-18 12:16:56
30#
分析:三个盖子等于一个盖子加一个可乐瓶
* 那么两个盖子就等于一瓶可乐。也就说想和三瓶可乐,买两瓶就行,可以买两瓶
* 可乐以后,借老板一瓶,然后将三个瓶盖当做一瓶还给老板,这样如果要喝的人数x
* 是三的倍数时n=x/3*2就是需要买的可乐数,如果不是三的倍数,剩余一人,
* 则再另外买一瓶,剩余两人,则再买两瓶。
* 公式:return (n%3==0)?(n/3*2) : ((n%3==1)?(n/3+1):(n/3+2));
public class Test10 {

        public static void main(String[] args) {
                int n=28;//需要和可乐的人数
        //  int n=50;
                int x;//需要买的可乐数
                x=method(n);
                System.out.println(x);
        }
        public static int method(int n) {
          return (n%3==0)?(n/3*2) : ((n%3==1)?(n/3*2+1):(n/3*2+2));       
        }
}
回复 使用道具 举报
lanbo 中级黑马 2015-6-18 12:18:25
31#
笑脸的地方应该是冒号,请大家看一下
回复 使用道具 举报
最近为了笔试,想了一下这个题,见我博客:http://4259297.blog.51cto.com/4249297/1663206
如果用数学方法写代码太没有意思了,用多线程写起来我感觉比较爽。
回复 使用道具 举报
  表示不是太难 ...
回复 使用道具 举报
大神们这样是不对的
回复 使用道具 举报
大家都知道斐波那契吧
这个其实就是递归调用
在超过三瓶的时候继续调用方法本身
就知道结果了
回复 使用道具 举报
先用数学解题思想进行解答,然后用程序代替
回复 使用道具 举报
谢谢分享  膜拜大神
回复 使用道具 举报
LLLLL 中级黑马 2015-12-2 17:32:18
38#
6666666666666666666666
回复 使用道具 举报
还是不会啊
回复 使用道具 举报
还是觉得很难
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马