这应该是一个面试题

王考拉 2016-08-04 08:44:44
有27个人要喝水,每三个空瓶子可以换一瓶水,问需要买多少瓶水,请用循环的方法写出来,递归还没学到那。求教
...全文
968 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
java竹雨 2016-08-19
  • 打赏
  • 举报
回复
//多少水 public int sui = 0; //空瓶子 public int pingzi = 0; public void getNum(int num){ if(num == 0){ System.out.println(sui); }else{ sui ++; pingzi ++; if(pingzi == 3){ pingzi = 0; if(num >= 2){ getNUM(num - 2); }else{ getNUM(num - 1); } }else{ getNUM(num - 1); } } }
qq_16629149 2016-08-18
  • 打赏
  • 举报
回复
public class TestW { private int numPeople; public int getNumPeople() { return numPeople; } public void setNumPeople(int numPeople) { this.numPeople=numPeople; } public static void main(String[] args) { TestW wp=new TestW(); wp.setNumPeople(27); int a=0; for(int i=1;i<=wp.getNumPeople();i++){ if(i%4==0){ System.out.println("第"+i+"个人可以使用空瓶子换取一瓶水。"); }else{ a=a+1; System.out.println("第"+i+"个人买了一瓶水。已经买了"+a+"瓶水!"); } } } }
HerveyHall 2016-08-17
  • 打赏
  • 举报
回复
引用 17 楼 onetwonumberlzw 的回复:
18瓶水,18+6+2+1-1(最后可以借一个空瓶子,凑够3瓶,喝完了再换一个空瓶子)
正解,这题亮点就在于借瓶子,简化一下,假设每到第三个人就去借瓶子,那么第三瓶水永远是免费的,即每喝三瓶水就需要买两瓶水,所以假设N个人喝水,那么就需要买(N/3*2+N%3)瓶水,将N=27代入,得18
mapleinlove1 2016-08-17
  • 打赏
  • 举报
回复
public static void main(String[] args) { // TODO Auto-generated method stub int m=0; int n=0; for (int i=1;i<=27;i++){ if(m==3){ m=1; System.out.println("第"+i+"个人喝水了!"+"剩余空瓶子"+m+",已买瓶子"+n); }else{ n++; m++; System.out.println("第"+i+"个人喝水了!"+"剩余空瓶子"+m+",已买瓶子"+n); } } System.out.print("共需要买瓶子"+n+"个!"); }
onetwonumberlzw 2016-08-16
  • 打赏
  • 举报
回复
18瓶水,18+6+2+1-1(最后可以借一个空瓶子,凑够3瓶,喝完了再换一个空瓶子)
ryanmyj 2016-08-11
  • 打赏
  • 举报
回复
public class Test {
	public static void main(String[] args) throws Exception{
		int bottle = 0;
		for (int i = 1; i <= 27; i ++) {
			System.out.println("第" + i + "个人喝到水啦!");
			bottle ++;
			if (bottle%3 == 0) {
				i ++;
				System.out.println("第" + i + "个人喝到免费水啦!");
			}
		}
		System.out.println(bottle);
	}
}
输出结果: 第1个人喝到水啦! 第2个人喝到水啦! 第3个人喝到水啦! 第4个人喝到免费水啦! 第5个人喝到水啦! 第6个人喝到水啦! 第7个人喝到水啦! 第8个人喝到免费水啦! 第9个人喝到水啦! 第10个人喝到水啦! 第11个人喝到水啦! 第12个人喝到免费水啦! 第13个人喝到水啦! 第14个人喝到水啦! 第15个人喝到水啦! 第16个人喝到免费水啦! 第17个人喝到水啦! 第18个人喝到水啦! 第19个人喝到水啦! 第20个人喝到免费水啦! 第21个人喝到水啦! 第22个人喝到水啦! 第23个人喝到水啦! 第24个人喝到免费水啦! 第25个人喝到水啦! 第26个人喝到水啦! 第27个人喝到水啦! 第28个人喝到免费水啦! 总共买了21瓶水。
baidu_35807870 2016-08-11
  • 打赏
  • 举报
回复
27/3*2=18
Beginner_kk 2016-08-10
  • 打赏
  • 举报
回复
引用 6 楼 bree06 的回复:
[quote=引用 5 楼 Beginner_kk 的回复:]
int people = 1;测试一下[/quote]
public static void main(String arg[]) {
        int people = 27;
        int sum = 0;
        int flag = 0;
        while (people >= 0) {
            if (flag % 3 == 0) {
                flag++;
                people--;
            }
            sum++;
            flag++;
            people--;
        }
        System.out.println(sum);
    }
wrong1111 2016-08-06
  • 打赏
  • 举报
回复
引用 12 楼 qq_26934643 的回复:
27个人买27瓶水啊,是我想的太简单了吗
空瓶子换出的水就是多的了。。浪费了。
qq_26934643 2016-08-06
  • 打赏
  • 举报
回复
27个人买27瓶水啊,是我想的太简单了吗
bigbaldy 2016-08-05
  • 打赏
  • 举报
回复
看来不对,没计算余数
bigbaldy 2016-08-05
  • 打赏
  • 举报
回复
我写了个递归加循环的,得19

public static void main(String[] args)
    {
        for(int i=1;i<27;i++)
        {
            if(count(i,0)==27)
            {
                System.out.println(i);
                break;
            }
        }
    }


    private static int count(int x,int result)
    {
        result+=x;
        if(x>=3)
        {
            result=count(x/3,result);
        }
        return result;
    }
fondOfJava 2016-08-05
  • 打赏
  • 举报
回复
至少要买21瓶水够27人喝,还多了一瓶,退回去。
qq_30562569 2016-08-05
  • 打赏
  • 举报
回复
public class testMain { public static void main(String[] args) { int newWater = 0 ; //新水 int inWater = 0 ; //空水 for (int i = 1; i <= 27; i++) { if(i%3 == 0){ ++inWater; } newWater = i; if(newWater+inWater == 27){ break; } System.out.println("已喝"+newWater+"=="+"用空瓶换"+inWater+"瓶"); } } }
bree06 2016-08-04
  • 打赏
  • 举报
回复
起始可以不从1开始, 3瓶换1瓶, 可以估计结果应该在2/3 ~ 3/3之间.
public
class Demo60 {
    public static void main(String[] args) {
        int i, c = 27;
        for (i = (c / 3) << 1 ; m(i) < c; i++);
        System.out.println(i);
    }

    static int m(int a) {
        int d, o, m = a;
        do {
            m += d = a / 3;
            o = a % 3;
            a = d + o;
        } while (d > 0);
        return m;
    }
}
  • 打赏
  • 举报
回复
引用 1 楼 liangzhmj 的回复:
public class Heshui {

	private static int counter = 0;//新水计数
	private static int emptyCount = 0;//空瓶计数
	
	public static void main(String[] args) {
		
		for (int i = 1; i <= 27; i++) {
			drink(i);
		}
		System.out.println("至少需要"+counter+"瓶水");
	}

	public static void drink(int num){
		System.out.println("第"+num+"个人喝水前空瓶数:"+emptyCount);
		if(emptyCount > 2){//换新水
			emptyCount -= 2;
			System.out.println("第"+num+"个人用三个空瓶换了一瓶,喝水后空瓶数:"+emptyCount);
			return;
		}
		//拿新水
		counter ++;
		emptyCount ++;
		System.out.println("第"+num+"个人拿了一瓶新水,拿的新水数:"+counter+",喝水后空瓶数:"+emptyCount);
	}
}
这样的话是至少19瓶水,不知道有没有忽漏
赞一个
liangzhmj 2016-08-04
  • 打赏
  • 举报
回复
public class Heshui {

	private static int counter = 0;//新水计数
	private static int emptyCount = 0;//空瓶计数
	
	public static void main(String[] args) {
		
		for (int i = 1; i <= 27; i++) {
			drink(i);
		}
		System.out.println("至少需要"+counter+"瓶水");
	}

	public static void drink(int num){
		System.out.println("第"+num+"个人喝水前空瓶数:"+emptyCount);
		if(emptyCount > 2){//换新水
			emptyCount -= 2;
			System.out.println("第"+num+"个人用三个空瓶换了一瓶,喝水后空瓶数:"+emptyCount);
			return;
		}
		//拿新水
		counter ++;
		emptyCount ++;
		System.out.println("第"+num+"个人拿了一瓶新水,拿的新水数:"+counter+",喝水后空瓶数:"+emptyCount);
	}
}
这样的话是至少19瓶水,不知道有没有忽漏
bree06 2016-08-04
  • 打赏
  • 举报
回复
引用 4 楼 qq_22778121 的回复:
Water(2);测试一下
bree06 2016-08-04
  • 打赏
  • 举报
回复
引用 5 楼 Beginner_kk 的回复:
int people = 1;测试一下
Beginner_kk 2016-08-04
  • 打赏
  • 举报
回复
public class Main {
    public static void main(String[] arg) {
        int people = 24;
        int sum = 3;
        int flag = 3;
        while (people > 0) {
            if (flag % 3 == 0) {
                flag++;
                people--;
            }
            sum++;
            flag++;
            people--;
        }
        System.out.println(sum);
    }
}
加载更多回复(1)
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧