/* 5個砝碼 用天平稱重時,咱們但願用盡量少的砝碼組合稱出儘量多的重量。 若是隻有5個砝碼,重量分別是1,3,9,27,81。則它們能夠組合稱出1到121之間任意整數重量(砝碼容許放在左右兩個盤中)。 本題目要求編程實現:對用戶給定的重量,給出砝碼組合方案。 例如: 用戶輸入: 5 程序輸出: 9-3-1 用戶輸入: 19 程序輸出: 27-9+1 要求程序輸出的組合老是大數在前小數在後。 能夠假設用戶的輸入的數字符合範圍1~121。 */ import java.io.BufferedReader; import java.io.InputStreamReader; public class 砝碼稱重 { /** * @param args */ private static boolean b = true; private final static int[] array = {1,3,9,27,81}; private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static String expression(int num){ int i = 0; int next = 0; int x = 0; int k = 0; String str = ""; boolean bool = true; for(i=0;i<5;i++){ if(array[i]==num) return num+""; else if(array[i]<num); else break; } int n = 0; for(int j=0;j<i;j++){ n = array[j]+n; } if(num>n){ next = array[i]; x = next-num; b = !b; } else if(num<n){ next = array[i-1]; x = num-next; } else{ str = array[i-1]+""; for(k=i-2;k>=0;k--){ if(b){ str = str+"+"+array[k]; } else{ str = str+"-"+array[k]; } } return str; } if(b) return next+"+"+expression(x); else return next+"-"+expression(x); } public static int input()throws Exception{ String str = in.readLine(); return Integer.parseInt(str); } public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub int in = input(); if(in>121||in<1) System.out.println("input wrong"); else{ String str = expression(in); System.out.println(str); } } }