黑马程序员技术交流社区
标题:
有没有好点的方法解决???
[打印本页]
作者:
lanzy1989
时间:
2014-9-20 21:20
标题:
有没有好点的方法解决???
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路
import java.io.*;
public class TestString extends Thread {
public static void main(String[] args) throws Exception {
method_1(28);
}
private static void method_1(int p) throws Exception {
// 当是3的倍数时,需要多拿一瓶,
if (p % 3 == 0) {
int p1 = mehod_2(p + 1);
System.out.println(p1);
}
// 当不是3的倍数是不需要多拿,
else {
int p1 = mehod_2(p);
System.out.println(p1);
}
}
// 定义方法返回需要的瓶数
private static int mehod_2(int p) {
int i = 0, j = 0, p1 = 0, p2 = 0, s = 0;
while (s != p) {
p1++;
p2 = p1;
s = p2;
while (p2 >= 3) {
i = p2 % 3;
j = p2 / 3;
p2 = i + j;
s += j;
}
}
return p1;
}
}
复制代码
作者:
java_dream
时间:
2014-9-20 22:24
本帖最后由 java_dream 于 2014-9-20 23:52 编辑
就这么简单:
public class BuyKeLe{
public static void main(String[] args){
int people = 28;
System.out.println(people+"个人,需要购买"+buy(people,1,0)+"瓶可乐");
}
/**
*
* @param people 喝饮料的人数
* @param count 购买的可乐数量
* @param give 赠送的可乐数量
* @return 返回购买的可乐数量
*/
public static int buy(int people,int count,int give){
//每次手里有3瓶(包括购买的和赠送的)就获赠1瓶
give = (count+give)%3==0 ? give+1 : give;
//如果购买的可乐数量+赠送的可乐数量还不够,继续购买
if((count+give)<people){
return buy(people,++count,give);
}else{//已经够喝了,返回需购买的数量
return count;
}
}
}
复制代码
作者:
qq8921310
时间:
2014-9-20 22:52
看起来二楼的更清晰啊。
作者:
new999
时间:
2014-9-20 23:08
本帖最后由 new999 于 2014-9-21 09:46 编辑
package com.itheima.test;
public class EmptyBottles{
public static void main(String[] args){
final int pNum=3;
//3空瓶=1瓶可乐+1可乐,也就是1空瓶=0.5瓶可乐,所以初始1瓶可乐=1.5瓶可乐
//因此,最初只要买pNum*/1.5瓶可乐,就够pNum人喝
int num=pNum*2/3;
System.out.println("方法1:买来"+(pNum%3==0?num:num+1)+"瓶可乐,够"+pNum+"人喝");
System.out.println("方法2:买来"+getBottles(pNum)+"瓶可乐,够"+pNum+"人喝");
}
private static int getBottles(int pNum) {
//empty用于记录空瓶数,sum是实际喝到的瓶数,bottles2是换来的可乐。
int sum, empty,bottles2;
for (int i = pNum>>>1; i < pNum; i++) {
sum = i;//初始瓶数i,喝掉i瓶,
empty = i;//产生i瓶空瓶
while ((bottles2=empty/3)!=0) {//空瓶换可乐
sum += bottles2;//喝掉换来的可乐,
empty = bottles2 + empty%3;//产生的空瓶再加上上次剩下的空瓶
}
if(empty==2){//向老板赊来1瓶,最后用3个空瓶偿还
sum++;
}
//System.out.println("买来"+i+"瓶可乐,够"+sum+"人喝,最后剩下个"+empty+"空瓶");
if(sum>=pNum){
return i;
}
}
return pNum;
}
}
复制代码
作者:
new999
时间:
2014-9-20 23:16
买来34瓶可乐,够50人喝
作者:
new999
时间:
2014-9-20 23:18
买来19瓶可乐,够28人喝
作者:
new999
时间:
2014-9-20 23:19
java_dream 发表于 2014-9-20 22:24
就这么简单:
换来的可乐,喝完产生的空瓶,也是可以拿来换可乐的
作者:
Apologize丶
时间:
2014-9-20 23:24
我的术测试题里就有这个
作者:
java_dream
时间:
2014-9-20 23:53
new999 发表于 2014-9-20 23:19
换来的可乐,喝完产生的空瓶,也是可以拿来换可乐的
谢谢提醒,考虑不全,稍微修改就好了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2