天平称重:变种3进制

阅读: 评论:0

天平称重:变种3进制

天平称重:变种3进制

题目:用天平称重时,我们希望用尽可能少的砝码祝贺称出尽可能多的重量。

如果有无限个砝码,但他们的重量分别是1,3,9,27&#等3的指数幂神奇之处在于用他们的组合可以称出任意整数重量(砝码允许放在左右两个盘中)。

本题目要求编程实现:对用户给定的重量,给出砝码组合方案,重量<1000000。

例如:

用户输入:

5

程序输出:

9-3-1

 

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int weight = Int();String res = scheme(weight);System.out.println(res);}public static String scheme(int weight){String str = new String(weight,3)).reverse().toString();char[] cArr = CharArray();List<Integer> list = new ArrayList<>();for(int i =0;i<cArr.length;i++){if(cArr[i] == '2'){list.add(-1);if(i == cArr.length-1){list.add(1);}else{cArr[i+1]++;}}else if(cArr[i] == '3'){list.add(0);if(i == cArr.length-1){list.add(1);}else{cArr[i+1]++;}}else{list.add(cArr[i]-'0');}}//System.out.println(list);StringBuilder sb = new StringBuilder();for(int i =list.size()-1;i>=0;i--){int res = pow(3,i)*(i);if(res == 0)continue;if(res>0 && i!=list.size()-1){sb.append("+");}sb.append(res);}String();}public static int pow(int a,int n){if(n == 0)return 1;if(n == 1) return a;int res = a;int nn = 1;while(nn*2<n){nn*=2;res *= res;}return res*pow(a,n-nn);}
}

本文发布于:2024-02-01 15:23:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677218237560.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:称重   变种   天平   进制
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23