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)); }
}