题目:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
在论坛上见很多人对这个题的理解是需要3个瓶盖才能换一个可乐;
其大体思路可见http://bbs.itheima.com/thread-144430-1-1.html
这样解我认为是没问题的
但是在某些人数的时候买的可乐不一定就是最优的,怎么理解呢
一般思路下认为:
人数 1 2 3
需买可乐数 1 2 3
但实际上第三个人的第三瓶可乐需不需要买呢?实际上是不需要的,怎么理解呢:
当第二个人买了可乐后,就有2个可乐瓶盖了,如果我再去买第三瓶可乐的话,我的手上就会出现了3个可乐瓶盖,这也就多出了一瓶可乐了,那我第三瓶可乐不是白买了么???
也就是说:当我手上有2个瓶盖的时候,我就可以去和老板商量,拿2个瓶盖做信用抵押,赊一个瓶盖换可乐,这样就将手上的可乐瓶盖全部使用了,也就是说这3个人实现了资源的最大使用,可以将这3个人分为一个组,这个组内给他们买2瓶可乐就能实现组内的每个人喝到可乐;
那么n个人也就可以分为n/3组,剩下人的就是落单的,就需要每个人买一瓶,也就是说n个人需要买n/3*2+n%3瓶可乐了
所以此题可以扩展为n个人买可乐,m个可乐瓶盖换一瓶可乐,求所需可乐数,将3换成m就好了(n/m*(m-1)+n%m)
下面附上我做这个题的代码:
- public class Test10 {
- public static void main(String[] args) throws IOException {
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- while(true)
- {
- System.out.println("请输入要喝可乐的人数:");
- String string=br.readLine();
- getColaNumber(Integer.parseInt(string),3);
- }
- }
- //获取所需购买的可乐数;personNumber为喝可乐的人数,colaLidNumber为换一瓶可乐所需的瓶盖数
- public static void getColaNumber(int personNumber,int colaLidNumber)
- {
- int num=personNumber/colaLidNumber*(colaLidNumber-1)+personNumber%colaLidNumber;
- System.out.println(personNumber+"个人需买"+num+"瓶可乐,才够喝");
- }
- }
复制代码
|
|