黑马程序员技术交流社区

标题: "28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那" 这个题..... [打印本页]

作者: 破烂小白    时间: 2015-5-14 18:38
标题: "28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那" 这个题.....
  1. class demo2
  2.         {
  3.         public static void main (String[] args)
  4.           {
  5.                 System.out.print((28/4)*3+(28&4));
  6.                
  7.                 }
  8.         ]
复制代码
/*
                 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
                 28/4*3+28&4   //我只得这样是可以算出来的但是用变量的话是怎么搞。。
         
                 够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)


用变量的话怎么搞


作者: 破烂小白    时间: 2015-5-14 18:41
或者说有其他方法不?
作者: 破烂小白    时间: 2015-5-14 18:47
。。。这个答案是 25瓶不。。
作者: 破烂小白    时间: 2015-5-14 19:21
难道是我问的比较弱?
作者: tanzhixue    时间: 2015-5-14 21:03
这个虽然比较繁琐,但是比较易懂
class PingGai
{
        public static void main(String[] args)
        {
                ping();
        }
        public static void ping()
        {
                int huan=0;;
                int ping=0;
                int mai=0;
                while(ping<=28)
                {
                        if(ping%3==0)//瓶子够了3瓶就能换一次
                        {
                                huan++;
                               
                        }
                        ping++;
                        mai=ping-huan;
                       
                }
                System.out.println(mai);
       
        }
}
作者: xiao7181jun    时间: 2015-5-14 21:06
本帖最后由 xiao7181jun 于 2015-5-14 21:19 编辑
  1. <blockquote>/*需求:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
复制代码

作者: xiao7181jun    时间: 2015-5-14 21:20
本帖最后由 xiao7181jun 于 2015-5-14 21:25 编辑
  1. /*需求:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
  2. * 够28人喝?
  3. * 分析:
  4. * 首先设置 买的 int x=0;与 送的 int y=0; 两个变量。
  5. * 主要算法是遇到3和3的倍数,倍数就加1.
  6. * 使用while循环语句(因为循环多少次不确定 所以用这个)
  7. * 再循环语句中设置 买的 x++ 与送的y=(x+y)/3 ,的和为28即可。
  8. * (x+y)/3的意思是只要买的瓶盖与送的瓶盖是3的倍数,就能给y赋值,就是说再买一瓶。(提醒:因为y是int类型,除不尽的话就取整数)
  9. * 然后设一个判断条件(用 if语句),如果x+y == 28就返回。
  10. * */
  11. public class KeLe2 {
  12.         public static void main(String[] args) {
  13.                 int x=0;
  14.                 int y=0;
  15.                 while(x<28) {
  16.                         x++;
  17.                         y =(x+y)/3;
  18.                         if(x+y == 28) {
  19.                         break;
  20.                         }
  21.                 }
  22.         System.out.println("买可乐:"+x+"送可乐:"+y);
  23.         }

  24. }
复制代码

作者: redlake    时间: 2015-5-14 22:10
  1. class Test1
  2. {
  3.         /*
  4.         比较笨的方法,假设买x瓶可乐能满足sum人喝,则当sum=28时,打印出x即可。
  5.         free:每一次兑奖的瓶数。last:每一次剩下的不能兑奖瓶数。
  6.         把买的可乐和每一次兑奖的可乐加起来就是可乐总数。
  7.         */
  8.         public static void main(String[] args)
  9.         {
  10.                 show(28);
  11.                 //show(50);
  12.         }
  13.         public static void show(int tol)
  14.         {
  15.                 int free=0,last=0, sum=0;
  16.                 int x=1,m=0;
  17.                 while(sum<tol)
  18.                 {                        for (sum=x,m=x,free=m;m>=3 ; )//只要每一次兑奖的瓶数和剩下的大于等于3,就能兑奖,否则退出循环。
  19.                         {
  20.                                
  21.                                 free=m/3;
  22.                                 last=m%3;
  23.                                 m=last+free;
  24.                                 sum+=free;
  25.                                

  26.                         }
  27.                         System.out.println("买x瓶可乐可满足几人喝:"+x+"  "+sum);
  28.                         x++;//递增
  29.                 }
  30.        
  31.                 System.out.println(sum+"人至少需要买:"+(x-1));//结束的时候x多加了1
  32.                
  33.         }
  34. }
复制代码

抛砖引玉,有更多好方法大家交流以下!:D
作者: 浪死歌    时间: 2015-5-14 22:16
第一个我就没看懂
作者: liyuer    时间: 2015-5-15 00:32
有点难啊,
没有思路呢
作者: sxsxsx    时间: 2015-5-15 11:09
答案是多少呢

作者: yaoyeqing    时间: 2015-12-5 22:43
  1. package com.heima.test;
  2. /*
  3. * *Test10--28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,
  4. *  那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
  5. *  
  6. *  ping  gai         ren
  7. *  1     1            1
  8. *  2     2            2
  9. *  3     3            4
  10. *  4     4(1pin)      
  11. *  6     6(2pin)      8
  12. *  19    19+6+2+1
  13. *  
  14. * */
  15. public class Test10 {
  16.         public static void main(String[] args) {
  17.                 int pin = 0;
  18.                 int ren = 28;
  19.                        
  20.                 for(int i = 1; ; i++){
  21.                         pin = 0;
  22.                         pin = change(i);
  23.                         if(i+pin >= ren){
  24.                                 System.out.println(i);
  25.                                 break;
  26.                         }
  27.                        
  28.                 }
  29.                
  30.                
  31.         }
  32.        
  33.         //瓶盖能换多少瓶汽水用递归
  34.         public static int change(int num){
  35.                 int pin = 0;
  36.                 int gai = 0;
  37.                 if(num < 3){//当剩下的瓶盖小于3就返回兑换了多少瓶
  38.                         return pin;
  39.                 }
  40.                 else{
  41.                         pin = num/3; //第一次能兑换的瓶数
  42.                         gai = num - pin*3 +pin;//剩下的盖子等于兑换的瓶子数+兑换后剩下的盖子数
  43.                         pin = pin+change(gai);//剩下的盖子数再递归调用来求瓶子数
  44.                        
  45.                 }
  46.                
  47.                 return pin;
  48.         }
  49. }
复制代码

作者: 空白、    时间: 2016-8-15 10:34
666666,最好给个运行答案就好了




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