黑马程序员技术交流社区

标题: 关于那道28人喝汽水的问题,还有没有人比我的代码更简单啊 [打印本页]

作者: chenglove1201    时间: 2014-10-10 17:32
标题: 关于那道28人喝汽水的问题,还有没有人比我的代码更简单啊
  1. package itheima;

  2. public class While_demo
  3. {
  4.        
  5.         /*
  6.          * 题目:有28人喝汽水,已知每3个空瓶可换1瓶汽水,问最少买多少瓶汽水便可满足28人都喝上汽水
  7.          */
  8.        
  9.         public static void main(String[] args)
  10.         {
  11.                 //get();
  12.                 System.out.println("最少需要购买数量:"+get());
  13.         }
  14.         public static int get()
  15.         {
  16.                 int Num = 0;                //定义总瓶数;
  17.                 int count = 0;                //定义需要购买的数量;
  18.                 int key = 0;                //定义用空瓶换来的数量;
  19.                 int N = 28;                        //定义总人数
  20.                
  21.                 while(Num<N)                //只要总瓶数不到N,就要循环;
  22.                 {
  23.                         count++;
  24.                         if(count>=3)
  25.                         {
  26.                                 if(count%2==1)
  27.                                         key++;
  28.                         }
  29.                
  30.                         Num = count+key;
  31.                 }
  32.                 return count;
  33.         }
  34. }
复制代码

作者: chenglove1201    时间: 2014-10-10 17:33
只要改变N的值,便可得出任何人数的最少瓶数
作者: chenglove1201    时间: 2014-10-10 17:37
看过别人的代码,没研究过,不知道别人的代码能不能随便输入人数和兑换基数就可得出相应最少瓶数,我的就写了一点,改改的话能得到想要结果,但电脑电池没电了,明天再发个完整的看看,望各位大神能多多指导
作者: darkads    时间: 2014-10-10 18:33
2*(n/ 3) + n% 3
这个最简单
作者: waylent    时间: 2014-10-10 18:46
darkads 发表于 2014-10-10 18:33
2*(n/ 3) + n% 3
这个最简单

好像不对呀,如果n=3,2*(3/3)+3%3=2,也就是买两瓶就能够三个人喝?
作者: waylent    时间: 2014-10-10 18:47
我的思路和楼主的一样
作者: darkads    时间: 2014-10-10 18:57
waylent 发表于 2014-10-10 18:46
好像不对呀,如果n=3,2*(3/3)+3%3=2,也就是买两瓶就能够三个人喝?

这是一个脑筋急转弯:2瓶汽水够3个人喝
两个瓶盖,再向老板赊一瓶,得到瓶盖后,将3个瓶盖还给老板就行了
作者: 默默丶    时间: 2014-10-10 19:08
  1. int i=0,j=0,k=0;
  2.         //通过循环,和瓶盖的逢三让i加一,然后j变为1
  3.         //最后获得需要购买的可乐数量
  4.                 while(i<num){
  5.                         i++;
  6.                         j++;
  7.                         k++;
  8.                         if(j%3==0){
  9.                                 i++;
  10.                                 j=1;
  11.                         }
  12.                 }
  13.                 //返回需要购买的可乐数量
  14.                 return k;
  15.         }
复制代码

作者: 十万一千    时间: 2014-10-10 19:41
  1. public static void main(String[] args) {
  2.                 Integer man = 28, drinked = 0, caps = 0, need = 0;
  3.                 while (drinked < man) {
  4.                         need++;
  5.                         drinked++;
  6.                         caps++;
  7.                         if (caps == 3) {
  8.                                 drinked++;
  9.                                 caps = 1;
  10.                         }
  11.                 }
  12.                 System.out.println(need);
  13.         }
复制代码

作者: chenglove1201    时间: 2014-10-10 19:51
waylent 发表于 2014-10-10 18:46
好像不对呀,如果n=3,2*(3/3)+3%3=2,也就是买两瓶就能够三个人喝?

确实可以,向老板佘一瓶,喝完后再把空瓶子还他
作者: chenglove1201    时间: 2014-10-10 19:52
waylent 发表于 2014-10-10 18:46
好像不对呀,如果n=3,2*(3/3)+3%3=2,也就是买两瓶就能够三个人喝?

确实可以,向老板佘一瓶,喝完后再把空瓶子还他
作者: 敏敏好学    时间: 2014-10-10 20:19
这个有点像以前做过的应用题    k/3+k=28    只要算出来k就好了
作者: 980344791    时间: 2014-10-10 20:30
确实是个脑经急转弯问题
作者: 笑脸迷人    时间: 2014-10-10 22:46
http://bbs.itheima.com/thread-144613-1-1.html已经讨论了很多次了~~~
作者: 曾翀    时间: 2014-12-5 22:40
public class dsad
{
    public static void main(String[] args) throws Exception
    {
            num(28);
            num(50);
           
    }
    public static void num(int n)
    {
            int num=n-n/3;
            System.out.println(num);
    }
}
这个简单吧





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