题目:用天平称重时,我们希望用尽可能少的砝码祝贺称出尽可能多的重量。
如果有无限个砝码,但他们的重量分别是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 条评论) |