zoukankan      html  css  js  c++  java
  • 蓝桥杯训练 ——天平称重

    1. 天平称重

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

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

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

    2.题目分析

      1.砝码重量都是三的次方,故先转为3进制数

      2.由于每个砝码只有一个,故当有为2的数时,可将本位变为-1,然后前一位+1。

      3.遍历所有的位,使得没有哪一位的值为2.

    3.代码如下

    package test;
    
    
    import java.util.*;
    import java.util.Map.Entry;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;;
    public class Test4 {
        
        public static void main(String[] args) {                
            Scanner is=new Scanner(System.in);
            while(is.hasNextInt()) {
                int n=is.nextInt();
                ArrayList<Integer> arr=new ArrayList<>();
                char[] nums=Integer.toString(n,3).toCharArray();
                for(int i=nums.length-1;i>=0;i--) {
                    if(nums[i]<'2')
                        arr.add(nums[i]-'0');
                    else {
                        arr.add(-1);
                        if(i==0) {arr.add(1);}
                        else nums[i-1]+=1;
                    }
                }
                StringBuilder sb=new StringBuilder();
                for(int i=arr.size()-1;i>=0;i--) {
                    if(arr.get(i)>0)
                        if(i==arr.size()-1) sb.append((int)Math.pow(3, i));
                        else sb.append("+"+(int)Math.pow(3, i));
                    if(arr.get(i)<0)
                        sb.append("-"+(int)Math.pow(3, i));
                }
                System.out.println(sb.toString());
            }
    
            is.close();
        }
    
    }
  • 相关阅读:
    在列表中添加序号列
    在C#中使用正则表达式
    Git
    Linux 配置Java环境
    讯飞语义理解 JAVA SDK
    分屏显示
    Gdiplus
    重启进程
    MFC 常用功能属性
    MFC 打印
  • 原文地址:https://www.cnblogs.com/lshao/p/8622284.html
Copyright © 2011-2022 走看看