zoukankan      html  css  js  c++  java
  • 天平称重【递归解法】

    用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
    如果只有5个砝码,重量分别是1,3,9,27,81
    则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。

    本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
    例如:
    用户输入:
    5
    程序输出:
    9-3-1
    用户输入:
    19
    程序输出:
    27-9+1

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

    // 天平称重,递归解法
    public class A
    {
        // 把s中的符号取反(+变-,-变+)
        static String reve(String s){
            s = s.replace('-','#');
            s = s.replace('+','-');
            s = s.replace('#','+');
            return "-" + s;
        }
        
        static String f(int x){
            int a = 1;
            while(a<x) a *= 3;
            
            if(a==x) return "" + a;
            
            if(x<=a/2) return a/3 + "+" + f(x-a/3);
            
            return a + reve(f(a-x));
        }
        
        public static void main(String[] args){
            for(int i=1; i<100; i++){
                System.out.println(i + ": " + f(i));
            }
        }
    }
  • 相关阅读:
    [SCOI2003]严格N元树
    CF280 C. Game on Tree
    [HDU2281]Square Number
    [HDU5391]Zball in Tina Town
    [HDU3988]Harry Potter and the Hide Story
    [HDU5794]A Simple Chess
    [HDU5451]Best Solver
    [HDU1724]Ellipse
    [HDU6304]Chiaki Sequence Revisited
    [HDU6343]Graph Theory Homework
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8594300.html
Copyright © 2011-2022 走看看