题目描述
居然有假币!!! 事情是这样的,现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊。老王这就去买猪肉,结果找来的零钱中有假币!!!可惜老王一不小心把它混进了一堆真币里面去了。现在知道假币的重量比真币的质量要轻。给你一个天平,请用最快的时间把那个可恶的假币找出来。
输入
输入有多行,每一行的值为硬币的数目n
,1≤n≤230
,输入0
结束程序
输出
最少要称多少次一定能把那个假币找出来。输出对应输入行数。
样例输入
3
12
0
样例输出
1
3
【Java代码及解题思路】
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
List<Integer> a = new ArrayList<>();//用可变size的list接数
while (true){
int tmp = scanner.nextInt();
if(tmp==0){
break;
}
a.add(tmp);
}
int[] b = new int[a.size()]; // 存放硬币数,list转数组
for(int i = 0;i < a.size();i++){
b[i] = a.get(i);
}
int[] c = new int[b.length]; // 存放结果
for(int i = 0;i < b.length;i++){
int num = 0;
int temp = b[i];
while (true){
if(temp <= 3){
num = num + 1;
break;
}else {
temp = temp / 2;
num = num + 1;
}
}
c[i] = num;
}
for(Integer i : c){
System.out.println(i);
}
}
}