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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我做入学题的时候,有如下。
/**
         * 第十题:
         * 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
         * 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
         * @param args
         */
        public static void main(String[] args) {

                System.out.println(demand(28));
       
        }
       
        public static int demand (int person){
                for (int i = 1, sum = 1, temp = 3;     ; i *=temp,sum +=i){
                        if (person <sum){
                                return person - (sum - i) + i/temp -(person -(sum -i)) /temp;
                        }
                }
        }


上边的程序是别人写的,但是我看不懂,求大神给解释一下好么?

1 个回复

倒序浏览
本帖最后由 突然世界晴 于 2015-4-23 10:31 编辑
  1. public class Test40 {
  2. public static void main(String[] args) {
  3.         kele(28);
  4. }
  5. private static void kele(int person) {
  6.         //gaizi 是盖子个数 kele是可乐瓶数,buy是要买的数量
  7.         int gaizi=0;
  8.         int kele=0;
  9.         int buy=0;
  10.        
  11.         //如果人数少于3个则买的可乐和盖子就是该人的个数和
  12.         if(person<3)
  13.         {
  14.                 System.out.println(person+"个人,需要买"+person+"瓶可乐,还剩"+person+"个盖子");
  15.         }else
  16.         {
  17.                 //循环判断可乐增加跟人数相比,一次循环buy则加1,盖子加1,可乐+1
  18.                 while(kele<person)
  19.                 {
  20.                         kele++;               
  21.                         gaizi++;
  22.                         buy++;
  23.                         //如果盖子是3个了可乐+1,盖子变成1个
  24.                         if(gaizi==3)
  25.                         {
  26.                                 kele++;       
  27.                                 gaizi=1;
  28.                         }
  29.                 }
  30.         }
  31.          System.out.println(person+"个人,需要买"+buy+"瓶可乐,还剩"+gaizi+"个盖子");
  32. }
  33. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马