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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
* 够28人喝?假如是50人,又需要买多少瓶可乐?
(需写出分析思路)
        思路:
                1.该需求中拥有几个变量?一个是盖子的数目,一个是需要购买的可乐数目.
                一个是可以喝的可乐数.
                2.定义一个函数,接受一个int值,这个值就是我们需要满足多少人喝可乐.
                3.那么对于多少人和可乐,和买多少可乐之间如何产生联系呢?也就是,我们
                喝的可乐数,肯定< 可供喝可乐的数目.(如果等于就是够喝了,够喝了还需要计算吗?)
        总结:
                1.逻辑题目,就是考验人的一个逻辑分析能力,对于代码的需求并不高.
                2.既然是逻辑,那么你给了我什么,你需要我给你什么?就本题而言,客户
                给我一个满足多个人喝可乐的人数,而需求我返回我买多少可乐够他们喝.
                3.那么我们定义函数的时候,就应该把客户的需求做为一个参数传递进来,因为这个是他指定的,那么我就在返回值的时候给他返回一个他需要的购买数量.
                4.然后进入功能函数之后,我只有一个对方给定的一个人数,那么我要想,我如何能够让这个给定的人数与我的程序产生关联呢?
                5.我够买的数量是我要返回的值,那么怎么样我就需要购买呢?瓶盖够三个自然不用购买,那么谁会变化?自然是可以喝的可乐增加,瓶盖变成1;不够三个的话,我就要去买了,买了之后,可以喝的可乐就多了1,瓶盖也多1.
                6.当可以喝的可乐都和人数相等了,就不用再买了...但是这里为什么没有<=person呢?如果等于了,条件还满足,还要执行.都够喝了,执行还有意义吗?
               
                思考:
                        1.逻辑,逻辑,不行我就画画好吗?
                        2.不行我就把朋友兄弟都模拟参与进来可以吗?
                        3.逻辑练习需要一个过程,也急不得,多多的适应吧...
* */
public class Demo10 {
        public static void main(String[] args) {
       int person = 13;  //自定义需求.
       int cola = run(person); //接受需要购买的次数.
       System.out.println(cola);
   }

        public static int  run(int person) {
                int lid = 0;   //盖子数
                int cola = 0;   //可以喝的可乐数
                int gouMai = 0;  //需要购买的可乐数.
                for(;cola < person; cola ++)  //无论如何,可以喝的可乐都在增加.
                {
                        if(lid == 3)  //当盖子够三个了,盖子数又定义为一个.
                        {             //可以喝的可乐在上面已经增加了.
                                lid = 1;
                        }
                        else
                        {
                                gouMai ++;//如果不够三个,那么就要去买了,买一瓶,盖子自然增加一个.
                                lid ++;                                 
                        }
                }
                return gouMai;  //把购买的次数返回.
        }
}

4 个回复

倒序浏览
留着以后看看
回复 使用道具 举报
  1. public class SanshisanTest10 {

  2.         /**
  3.          *  10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
  4.          * 够28人喝?假如是50人,又需要买多少瓶可乐?
  5.          * @param args
  6.          */
  7.         public static void main(String[] args)
  8.         {
  9.                 Scanner sc=new Scanner(System.in);
  10.                 System.out.println("输入人数");
  11.                 int num=sc.nextInt();
  12.                 int mai=0;
  13.                 int meihuan=mai%3;
  14.                 int kehe=0;
  15.                 for(;kehe<num;mai++)
  16.                 {
  17.                         kehe=mai+method(mai,meihuan);
  18.                 }
  19.                 System.out.println(mai);
  20.        
  21.         }
  22.         //求除了一共可以换的瓶数;
  23.         public static int method(int n,int m)
  24.         {
  25.                 if(n+m==1)
  26.                         return 1;
  27.                 else if(n+m==2)
  28.                         return 2;
  29.                 else if(n+m==0)
  30.                         return 0;
  31.                 else if(n+m==3)
  32.                         return 4;
  33.                 else if(n+m==4)
  34.                         return 5;
  35.                 else
  36.                         return n/3+method(n/3,m);//7+2+2
  37.         }
复制代码

我的想法是可以喝的等于人数就行了,就是买的+换的等于人数。恩 就这样不知道对不对,,28结果是19
回复 使用道具 举报
很好,逻辑思维能力确实需要锻炼啊
回复 使用道具 举报
风华正茂 来自手机 中级黑马 2015-8-15 17:40:14
报纸
谢谢楼主分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马