);
}
}
if(a[h]!=0){
if(a[h]>0){
System.out.print("+"+a[h]);
}
else{
System.out.print(a[h]);
}
}
}
}
}
}
}
}
System.out.println();
look();
}else{
System.out.println("输入有误,请检查!");
look();
}
}
}
以下是所谓的递归算法,这里关键是弄清楚fact()方法的原理。
import java.util.Scanner;
public class Balance2 {
static int data[]={1,3,9,27,81};
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
deep(scanner.nextInt(),"");
}
//以下调用递归
private static void deep(int s,String str){
//当S变成零则输出结果
if(s==0){
System.out.println(str.substring(1));
}
//当s>0时,还应该添加砝码
else if(s>0){
int temp=s-fact(s);//调用fact()方法
deep(temp,str+"+"+fact(s));//调用方法自己,加号添加砝码
}
//当s<0时,应该减去砝码
else if(s<0){
int temp=s+fact(s);
deep(temp,str+"-"+fact(s));//调用方法自己
}
}
//以下是递归的算法:当物体的质量大于比它质量小的砝码的所有砝码质量和的时候选择大砝码。
private static int fact(int i) {
i=Math.abs(i);//返回 i 值的绝对值
int flag=0;//标记
int sum=0;//小砝码质量和
for(int j=1;j<5;j++){
//这个条件找到物体的质量的范围
if(i>data[j-1] && i<data[j] || i>=data[j]){
sum+=data[m];
}
if(i>sum){
flag=j;
}else{
flag=j-1;
}
}
}
return data[flag];
}
}