JAVA 有5个砝码 分别是1,3,9,27,81 可以组合成1--121之间任意整数

有5个砝码 分别是1,3,9,27,81 可以组合成1--121之间任意整数
对于用户给定的重量给出方案   如:输入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


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值