砝码重量问题

来源:互联网 发布:ci 连接数据库 慢 编辑:程序博客网 时间:2024/04/28 03:43
5个砝码
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码组合方案。例如:用户输入:5程序输出:9-3-1用户输入:19程序输出:27-9+1
要求程序输出的组合总是大数在前小数在后。可以假设用户的输入的数字符合范围1~121。
 
package dati;
import java.util.*;
public class fama { static int fm[]={1,3,9,27,81};  static int zhong; /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub    Scanner sc=new Scanner(System.in);    zhong=sc.nextInt(); String str=""; fa(fm.length,str,zhong); } static void fa(int n,String ss,int zhong){  if(n<=0){   jisuan(ss,  zhong);  }  else{   fa(n-1,ss,zhong);   fa(n-1,ss+"+"+fm[n-1],zhong);   fa(n-1,ss+"-"+fm[n-1],zhong);  } } private static void jisuan(String ss,int zhong) {  // TODO Auto-generated method stub  String[] data=ss.split("\\D");  String[] fuha=ss.split("\\d+");  int sum=0;  for(int i=0;i<fuha.length;i++){   if(fuha[i].equals("+")){    sum+=Integer.parseInt(data[i+1]);   }   else if(fuha[i].equals("-"))sum-=Integer.parseInt(data[i+1]);  }  if(sum==zhong)System.out.println(ss.substring(1)); }
}