日期:2014-05-20  浏览次数:20821 次

一道竞赛题目、、求各种答案、、来牛人
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1


输入:
41
输出:
81-27-9-3-1


要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。

------解决方案--------------------

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入0-121之间的数字:");
int n=sc.nextInt();
if(n>=0&&n<=121){
int[] a={0,-1,1};
int[] b={0,-3,3};
int[] c={0,-9,9};
int[] d={0,-27,27};
int[] e={0,-81,81};
for(int h=0;h<a.length;h++){
for(int i=0;i<b.length;i++){
for(int j=0;j<c.length;j++){
for(int k=0;k<d.length;k++){
for(int l=0;l<e.length;l++){
if(a[h]+b[i]+c[j]+d[k]+e[l]==n){
if(e[l]!=0){
System.out.print(e[l]+"+");
}
if(d[k]!=0){
System.out.print(d[k]+"+");
}
if(c[j]!=0){
System.out.print(c[j]+"+");
}
if(b[i]!=0){
System.out.print(b[i]+"+");
}
if(a[h]!=0){
System.out.print(a[h]);
}
}
}
}
}
}
}
}else{
System.out.println("输入不合法");
}
}