输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
输入例子:
3
10
81
0
输出例子:
1
5
40
本人代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
int j = 0;
while (true) {
j++;
if (j < 11) {//最多10组输入
int data = scanner.nextInt();
if (data > 0 && data < 101)//正整数
list.add(data);
else
break;
}
else
break;
}
int[] R ;
R = getBottle(list);
for (int i = 0; i < list.size(); i++)
System.out.println(R[i]);
}
public static int[] getBottle(List<Integer> list) {
int[] result = new int[list.size()];
if (list.size() == 0)
return result;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) < 2) result[i] = 0;
if (list.get(i) == 2) result[i] = 1;
else {
int counter = 0, a, b;
a = list.get(i);
while (true) {
b = a % 3;
a = a / 3;
if (a != 0)
counter = counter + a;
if (a == 0 && b == 2) {
counter = counter + 1;
result[i] = counter;
break;
}
if (a == 0 && b < 2) {
result[i] = counter;
break;
}
a = a + b;
}
}
}
return result;
}
}
提交结果:
请检查是否存在数组越界等非法访问情况
求大神指教

全部评论
(2) 回帖