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));
            }
        }
    }
  • 相关阅读:
    误区30日谈25-30
    误区30日谈21-24
    误区30日谈16-20
    误区30日谈11-15
    误区30日谈6-10
    eclipse如何导入java项目文件
    Spring配置bean文件的底层实现方式
    hibernate中get,load,list,iterate的用法及比较
    MySQL数据库的事务管理
    单元格样式
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8594300.html
Copyright © 2011-2022 走看看