砝码称重 (二)

2014-11-24 10:33:26 · 作者: · 浏览: 1
c void f(int n) {
int[] b = new int[a.length];
int len = a.length;
int[] sign = new int[len];
while (sign[0] < 3) { // 最前面的判定符号的值若 >=3 则结束循环
for (int i = 0; i < len; i++) {
if (sign[i] == 1) {
b[i] = a[i];
} else if (sign[i] == 2) {
b[i] = -1 * a[i];
} else
b[i] = 0;
}

check(n, b);
sign[len - 1]++;
for (int i = len - 1; i > 0; i--) { // 当值等于3时,实现逢3进位
if (sign[i] == 3) {
sign[i] = 0; // sign[i] 归零
sign[i - 1]++; // sign[i-1]进位
}
}
}
}

// 验证 并 输出
public static void check(int n, int[] b) {
StringBuffer sb = new StringBuffer();
int sum = 0;
for (int i = 0; i < b.length; i++)
sum = sum + b[i];
if (sum == n) {
for (int i = b.length - 1; i >= 0; i--)
sb.append(b[i] != 0 (b[i] > 0 "+" + b[i] : b[i]) : "");
sb.deleteCharAt(0); // 去掉首元素的"+"号;
System.out.println(sb);
return;
}
}

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("输入重量(1到121)之间任意整数");
int n = scan.nextInt(); // 输入重量
f(n);
}
}
运行结果:
输入重量(1到121)之间任意整数
19
27-9+1