5个砝码(java编写)
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1
A1.java
public class A1 {
publicstatic void main(String[] args){
for(intnum=1;num<=121;num++)
System.out.println(num+" = "+fama(num));
}
publicstatic String fama(intnum){
if(num<1||num>121)
return"out of range,num should be between [1,121]";
//num转换为三进制sanJinZhi,按位存放在tmp数组中(左边为低位)
int[] tmp = {0,0,0,0,0};
String sanJinZhi = Integer.toString(num, 3);
intcount = 0;
for(inti=sanJinZhi.length()-1;i>=0;i--)
tmp[count++] = sanJinZhi.charAt(i)-'0';
//由于1,3,9,27,81的砝码均只有1个
//所以对tmp[]进行一下处理:原位为0或1的不变,为2的变为-1且进位,为3的变为0且进位
//简单来说,假如我们需要2个值为9的砝码,我们可以用1个27的砝码减去1个9的砝码来代替,即将原位为2的变为-1且进位
for(inti=0;i<5;i++){
if(tmp[i]==2){
tmp[i]=-1;
tmp[i+1]++;
}elseif(tmp[i]==3){
tmp[i]=0;
tmp[i+1]++;
}
}
//根据tmp[]拼凑result式子
String result = "";
for(inti=4;i>=0;i--){
if(tmp[i]<0){
result = result + "-"+ (int)Math.pow(3, i);
}elseif(tmp[i]>0){
if(!result.equals(""))
result = result + "+"+ (int)Math.pow(3, i);
else
result = result + (int)Math.pow(3, i);
}
}
returnresult;
}
}