如果是二进制的话就直接用01来表示,天平秤的砝码有没有被使用过。
但是这是三的倍数,变相使用三进制。012都可存在,故没有直接的办法去判断能否使用。因为根据题意可知道不能重复使用。
思路:
代码:
package 题解;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class _01_天平称重 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = Integer.toString(n, 3);
char[] arr = str.toCharArray();
System.out.println(str);
int len = str.length();
List list = new ArrayList();
// 例如是 “221” 需要变成1 0 -1 1。
for (int i = len-1; i >= 0; i--) {
if(arr[i] == '1'){
list.add(0,1);
} else if (arr[i] == '2'){
list.add(0,-1);
if(i == 0){//判断是不是在数组的开始。
list.add(0, 1);
} else {
arr[i-1]++;
}
} else if(arr[i] == '3'){
list.add(0,0);
if(i == 0){
list.add(0, 1);
} else {
arr[i-1]++;
}
}
}
System.out.println(list);
//两种方法实现最后的输出。
/*
for (int i = 0; i < list.size(); i++) {
if(list.get(i).equals(1)){
System.out.print((int)Math.pow(3, list.size()-1-i)+" ");
} else if(list.get(i).equals(-1)){
System.out.print("-"+(int)Math.pow(3, list.size()-1-i)+" ");
}
}
*/
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if(list.get(i).equals(1)){
sb.append((int)Math.pow(3, list.size()-1-i)+" ");
} else if(list.get(i).equals(-1)){
sb.append('-').append((int)Math.pow(3, list.size()-1-i)+" ");
}
}
System.out.println(sb.toString());
}
}