本帖最后由 hnyzhlq 于 2015-7-11 16:42 编辑
/**
* 10、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
* 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
*/
/*
* 思路:
* 假设买x瓶可乐通过瓶盖换取可以够y个人喝,y等于人数就够喝了。
* 从1开始,递加x,直到y等于人数,此时的x就是需要求的值。
*
* 再考虑怎么由x计算y,设置瓶盖数等于x,当瓶盖数大于等于3就可以换可乐,
* 每换一轮可乐,新的瓶盖数为换的可乐数加上之前瓶盖数除以3剩下的瓶盖。
* 知道瓶盖数小于3,不能换可乐,在递加之前换的可乐总数就是y值。
*
* 特殊的:
* 剩下2个瓶盖依然可以换一瓶可乐,将换来的可乐和剩下的瓶盖都换回去,剩下0瓶盖。
* */
- import java.io.*;
- public class Test10 {
- public static void main(String[] args) throws IOException
- {
- //键盘录入人数,并将人数赋给常量P
- //经过录入28和50,分别计算得到29人需要买19瓶可乐,50人需要买34瓶可乐
- System.out.println("请输入人数:(>0)");
- BufferedReader br =
- new BufferedReader(new InputStreamReader(System.in));
- final int P = Integer.parseInt(br.readLine());
- //定义变量
- int y = 0;
- int x = 0 ;
- int i = 0;
- //当计算人数等于实际人数满足要求结束循环
- while(!(y == P)){
- x++;
- y = x;
- i = x;
- //瓶盖换饮料算法
- while(i>2){
- y += i/3;
- i = i/3+i%3;
- }
- //特殊的:还有2个瓶盖而可乐不够喝时,尝试再换一瓶
- if (y < P&&i == 2){
- y++;
- i=0;
- }
- }
- //输出结果
- System.out.println(P+"个人需要买"+x+"瓶可乐,剩余"+i+"个瓶盖");
- br.close();
- }
- }
复制代码
|