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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java_dream 中级黑马   /  2014-10-20 02:09  /  931 人查看  /  0 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /**
  2. * 10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  3. * 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  4. *
  5. * @author live-dream
  6. *
  7. */
  8. public class Test10 {
  9.        
  10.         public static void main(String[] args){
  11.                 int people = 50;
  12. //                int total = buy1(people);
  13.                 int total = buy2(people,1,0);
  14.                 System.out.println(people+"个人,需买"+total+"瓶可乐");
  15.         }
  16.         /**一般解法:
  17.          *
  18.          * @param people
  19.          * @return
  20.          */
  21.         public static int buy1(int people){
  22.                 int buy = 0;//购买的数量
  23.                 int total = 0;//购买的数量+用瓶盖换取的数量
  24.                 int bCap = 0;//当前持有的瓶盖数量
  25.                
  26.                 while(total<people){
  27.                         buy++;//购买一瓶
  28.                         total++;//总数增加1
  29.                         bCap++;//得到一个瓶盖
  30.                         if(bCap==3){//如果瓶盖够3个
  31.                                 total++;//换取一瓶,总数增加1
  32.                                 bCap=1;//持有一个瓶盖
  33.                         }
  34.                 }
  35.                 return buy;
  36.         }
  37.         /**递归解法:
  38.          *
  39.          * @param people 需要的可乐数量
  40.          * @param buy    购买的可乐数量
  41.          * @param give   赠送的可乐数量
  42.          * @return       返回购买的数量buy
  43.          */
  44.         public static int buy2(int people,int buy,int give){
  45.                 give = (buy+give)%3==0 ? give+1 : give;      //如果 购买的数量buy+赠送的数量give刚好够3瓶,又可获赠一瓶
  46.                 if((buy+give)<people){                       //如果购买的数量+赠送的数量还不够,再买
  47.                         return buy2(people,++buy,give);
  48.                 }else{                                       //如果数量够了,就返回该买的数量
  49.                         return buy;
  50.                 }
  51.         }

  52. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马