https://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0
package HJ; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class HJ22 { public static void main(String[] args) throws NumberFormatException, IOException { // TODO Auto-generated method stub BufferedReader cin = new BufferedReader(new InputStreamReader(System.in)); ArrayList<Integer> as = new ArrayList<Integer>(); String s; while ((s=cin.readLine()) !=null) { int a = Integer.parseInt(s);//空瓶子数量 if (a == 0)//输入为零则结束 break; else as.add(max(a));//把对应的一组数据添加到as中 } for(int i = 0;i<as.size();i++) { System.out.println(as.get(i)); } } private static Integer max(int a) { // TODO Auto-generated method stub if (a == 1) return 0;//如果手中的空瓶子数量位零则能换到的饮料数量位零 else if (a == 2 || a == 3)//空瓶数量为2或3则能换一瓶饮料 return 1; else {//手中的空瓶数量多余三个 int max = 0;//能换到的饮料数量 while (true) { int temp = a / 3;//每三个空瓶能换一瓶饮料,则瓶空瓶能换a/3瓶饮料 int temp1 = a % 3;//还完饮料后剩下的空瓶 if (temp == 0) {//当前手中的空瓶数量不到3瓶 if (temp1 == 0 || temp1 == 1) {//剩下的空瓶数量是1瓶或0瓶 break; } else {//剩下的空瓶数量为2瓶是可以换一瓶饮料(题目所给的条件) max++; break; } } else {//空中的空瓶数量大于3瓶 a = temp + temp1; max += temp; } } return max; } } }