黑马程序员技术交流社区
标题:
我写的一个关于瓶盖问题的答案,大家看下合理吗
[打印本页]
作者:
linqiwang
时间:
2015-7-8 13:30
标题:
我写的一个关于瓶盖问题的答案,大家看下合理吗
package com.itheima;
/**
* 28人买可乐喝,
* 3个可乐瓶盖可以换一瓶可乐,
* 那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
* @author Administrator
* 思路: (这里只考虑实现,不考虑算法的效率)
* 3个瓶盖换一瓶可乐,也就是当手中瓶盖数量为3时,
* 可以让 饮用人的数量加一,手中瓶盖数量变成1
* 实现:定义3个变量,第一个boottle 表示购买的瓶数 从0开始,
* 第二个 bottleCap 表示手机从0开始,当手中瓶盖数为3时,马上去换,换后bottleCap置为1,饮用人数加1
* 第三个变量 people表示喝到可乐的人数量
*/
public class Test10 {
public static void main(String[] args) {
System.out.println( "需要28个人喝时 得购买"+method(28) );
System.out.println( "需要50个人喝时 得购买"+method(50) );
}
/**
*
* @param people 需要让喝到可乐的人的数量
* @return
*/
public static int method(int people){
//初始化购买的瓶数
int boottle =0;
//初始话当前手中的瓶盖数
int bottleCap = 0;
//初始化喝到可乐的人数
int drinker =0;
for(int i=1;i<people;i++){
//购买的瓶数+1
boottle++;
//喝到的人数+1
drinker++;
//当前手中的瓶盖数
bottleCap++;
//如果手中瓶盖数为3,立即调换
if(bottleCap==3){
//调换之后,手中瓶盖数为1
bottleCap=1;
//饮用人数+1
drinker++;
}
// System.out.println("购买"+boottle+"杯时可以够"+drinker+"个人喝");
//如果喝到的人数等于需要的人数,退出循环
if(drinker==people)
break;
}
//输出需要购买的瓶数
return boottle;
}
}
作者:
半月
时间:
2015-7-8 14:23
public static int cap3to1(int x){
return x%3 == 0 ? x/3*2+1 : x/3*2+1+x%3-1;
}
复制代码
分成3个人一组
第一组买3瓶可乐可以换一瓶可乐,给后面一组.
后面只要买2瓶可乐就会有3个瓶盖了,就这样一直下去
人数: 3 3 3 3 3 3 2 = 20
可乐: 3 2 2 2 2 2 1 = 14
作者:
linqiwang
时间:
2015-7-8 15:00
非常感谢,虽然这个东西没什么用
作者:
linqiwang
时间:
2015-7-8 15:03
半月 发表于 2015-7-8 14:23
分成3个人一组
第一组买3瓶可乐可以换一瓶可乐,给后面一组.
你这算法写的非常精辟啊,学习了。思路不同,我是直接按理解来写的
作者:
122125241
时间:
2015-7-8 15:15
这题我想想就蛋疼- -
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2