蓝桥杯:天平称重解法补充——进制

package four;

public class tianping_jinzhi {
	/*
	 * 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
		如果只有5个砝码,重量分别是1,3,9,27,81
		则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
		
		本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
		例如:
		用户输入:
		5
		程序输出:
		9-3-1
		用户输入:
		19
		程序输出:
		27-9+1
		
		要求程序输出的组合总是大数在前小数在后。
		可以假设用户的输入的数字符合范围1~121。

	 */
	/*
	 * 思路:此次采用进制算法,根据题目中的砝码重量可以联想到将待称重的数字转化为三进制数。
	 */
	static String fun(int n){
		String s="";
		int q=1;//权重
		while(n>0){
			int shang=n/3;//商
			if(n%3==1){
				//如果余数为1  做加法
				s="+"+q+s;
			}
			if(n%3==2){
				//如果余数为2  做减法  商+1
				s= "-"+q+s;
				shang++;
			}
			//辗转相除,把商的值付给n,权重增加
			n=shang;
			q*=3;
		}
		
		//因为第一位之前总是有+  所以截取掉
		return s.substring(1);
	}
	public static void main(String[] args) {
		System.out.println(fun(19));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值