有5个砝码 分别是1,3,9,27,81 可以组合成1--121之间任意整数
对于用户给定的重量给出方案 如:输入5输出9-3-1
迭代法:
对于用户给定的重量给出方案 如:输入5输出9-3-1
迭代法:
import java.util.Scanner;
public class Test {
public static void test(int n) {
// 定义符号
int[] sign = new int[] { -1, 0, 1 };
// 因为不存在一个数需要-81,这样可以减少运算时间
int[] sign1 = new int[] { 0, 1 };
// 创建一个空的StringBuffer类的对象
StringBuffer sb = new StringBuffer();
// 数组式for循环
for (int a : sign) {
for (int b : sign) {
for (int c : sign) {
for (int d : sign) {
for (int e : sign1) {
// 数组里面的数字循环*砝码1、3、9、27、81
int i = a * 1;
int j = b * 3;
int k = c * 9;
int l = d * 27;
int m = e * 81;
// 找到结果
if (i + j + k + l + m == n) {
// X==O?ture:false
// 如果不为0,则添加元素,并在"正数"前添加"+"号
sb.append(m != 0 ? (m > 0 ? "+" + m : m) : "");
sb.append(l != 0 ? (l > 0 ? "+" + l : l) : "");
sb.append(k != 0 ? (k > 0 ? "+" + k : k) : "");
sb.append(j != 0 ? (j > 0 ? "+" + j : j) : "");
sb.append(i != 0 ? (i > 0 ? "+" + i : i) : "");
// 去掉首元素的"+"号;
sb.deleteCharAt(0);
// 输出
System.out.println("计算得出");
System.out.println(sb);
// 跳出循环
return;
}
}
}
}
}
}
}
public static void main(String[] args) {
// 定义初始输入的数字
int a = 0;
//while判断条件用
boolean b = true;
//创建一个扫描输入
Scanner sc = new Scanner(System.in);
//开始while循环
while (b) {
//用户提示
System.out.println("输入(1~121)之间任意整数");
//判断是否数字
if (sc.hasNextInt()) {
//是就传递给a
a = sc.nextInt();
//判断取值范围
if (a < 121 && a > 0) {
//是就让条件否,跳出循环
b = false;
} else {
//否就提示不在范围内
System.out.println("您输入的数字不在取值范围内");
}
} else {
//让用户重新输出
System.out.println("您输入的不是数字");
sc.next();
}
}
//把输出的数字带入函数
test(a);
}
}
最后得出:
输入(1~121)之间任意整数
112
计算得出
81+27+3+1