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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

入学考试的第10题,感觉我的方法好笨啊,大家帮忙看看怎样可以变得简单一些。高手指点一下

第10题:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
/ * 分析思路:(1)因为每买3瓶便可以兑换1瓶,相当于买3瓶够4个人喝。所以有:  3瓶 = 4人喝; 记为“买3瓶(解决4人喝,产生一个瓶盖)”。      (2)第4个人喝掉后又会产生一个瓶盖,当有3组“买3瓶”时,会帮助3个 第4人喝,产生3个瓶盖,即又可以使1个人喝,     此时,一共买了(3*3=9瓶)可以让(4*3+1=13人)喝,所以有: 9瓶 = 13人喝;记为“买9瓶(解决13人喝,产生一个瓶盖)”。
(3)同第二条,赠给的人还会产生瓶盖,当再产生3个瓶盖时,还可以兑换。故,当买3组“买9瓶”时,可以帮一个人喝, 此时购买了(3*9=27瓶)可以让(13*3+1=40人)喝,所以有;   27瓶 = 40人喝;记为“买27瓶(解决40人喝,产生一个瓶盖)”。
因为题目是买28瓶,或者50瓶,我们只需考虑上述3个等级便可。   
*            程序先判断28人大于13人,小于40人,故买2组“买9瓶”可以直接解决26个人引用,同时产生2个瓶盖,
*            此时,第27人直接购买,再产生1个瓶盖,换1瓶解决第28人饮用。便可以,此时共买了(9*2+1=19瓶)         
*            程序判断50人大于40人,故买1组“买27瓶”可以直接解决40人引用。同时产生 1 个瓶盖,
*            剩余 10人,小于13人,故用“买3瓶”解决。买两组“买3瓶”可以解决8人饮用,同时产生2个瓶盖,
*            此时,有3个空闲盖子,换一瓶,共饮用了(40+4*2+1=49人),第50人,需要自己购买。共买了(27+3*2+1=34瓶)。              
*/
public class Test10 {
        public static void main(String[] args){
                //从键盘输入总人数
                java.util.Scanner sc = new java.util.Scanner(System.in);
                System.out.println("请输入总人数:");
                int person = sc.nextInt();       
                //定义变量,最后总人数为sum
                int sum = 0;
                int a;
                int b;
                int c;
                int d;
                //分情况讨论,在4人及其以下的情况
                if(person <= 3){
                        sum = person;       
                }else if (person == 4){
                        sum = 3;
                        }       
                //讨论4-13人的情况,用我们的“买3瓶”处理
                else if (person >4 && person <13){
                                a =(int)person/4;
                                b =(int)person%4;
                                if(b == 2){
                                        sum = 3*a + b -1;
                                }else
                                sum = 3*a +b;
                        }else if (person ==13){
                                sum = 9;
                //讨论13-40人的情况,用我们的“买9瓶”处理大部分人
                        }else if (person >13 &&person <40){
                                a = (int)person/13 ;
                                b = person%13;
                                if(b== 0 || b ==1){
                                        sum = a*9 +b;
                                }
                                if(b==2){
                                        sum = a *9 + b -1;
                                }
                                if(b>=3){
                                        //讨论剩余人数,用“买3瓶”模式去做
                                        c=(int)b/4;
                                        d=b%4;
                                        if(d ==2){
                                                sum =a*9 + c*3 +d -1;
                                        }else               
                                        sum = a*9+c*3+d;
                                }
                        }else if(person ==40){
                                sum =27;
                        }
                        //讨论人数在40-121人时。大部分用“买27瓶”处理,其后依次再用“买9瓶”和“买3瓶”模式
                        else if(person >40 &&person< 121){
                                a = (int)person/40;
                                b = person%40;
                                if(b == 2){
                                        sum = 27*a +1;
                                }
                                if(b>=3 &&b<13){//剩余人用“买3瓶”模式处理
                                        c=(int)b/4;
                                        d=b%4;
                                        if(d ==2){
                                                sum =a*27 + c*3 +d -1;
                                        }else if(b>=13){}
                                       //其后用“买9瓶”处理,再用“买3瓶”处理,暂时不做讨论                       
                                }
                        }
        System.out.println(person + "个人需要买" + sum +  "瓶可乐");       
        }
}


0 个回复

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