题目:

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

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

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

方法一:

代码实现:

package cn.zzunit.jnvi;
/*** * @author tyrantForever*/
public class Project1 {//输入一个方程将其加号变为减号 减号变为加号public static void main(String[] args) {for(int i = 1; i < 10; i++) {System.out.println(findMethord(i));}}//输入的为需要将加减号对调的方程public static String reverse(String equation) {equation = equation.replace("+", "#");equation = equation.replace("-", "+");equation = equation.replace("#", "-");return equation;} public static String findMethord(int weight) {int counterWeight = 1;while(weight > counterWeight) {counterWeight *= 3;}if (weight == counterWeight) {//注意:此处有一个int转成String 的方法return counterWeight + "";}if(weight <= counterWeight / 2) {//问题:在这里怎么实现显示出counterWeigh的值return Integer.toString(counterWeight / 3 ) + "+" + findMethord(weight - counterWeight / 3);}else {return Integer.toString(counterWeight) + "-" + reverse(findMethord(counterWeight - weight)); }}}

注:

(1)将int类型数据转为String类型的数据可以直接再int类型的数据之后拼接一个空串

(2)reverse函数的目的是实现一个方程中的“+”变“-” “-”变“+” 但是不能直接变而是借助了一个中间变量“#”,否则先将+ 变成了-然后又将- 变成了 + 最后全是+

(3)注意replace()和replaceAll()的区别 replace不支持正则表达式,replaceAll支持

方法二:

使用进制的方法

思路:

砝码都是3的倍数,类似于将一个数转换成三进制,但是不同的是三进制的余数为:0、1、2,但是本题将余数改为:-1、0、1

所以在使用除三取余的方法时规则出现了改变

如:使用除三取余的方法分解5

注:将 2改为-1 ,方法就是将商商大一点自然余数就是负的

代码实现:

package cn.zzunit.jnvi;
/*** * @author tyrantForever**/public class Project1_2 {public static void main(String[] args) {for(int i = 1; i < 10; i++) {System.out.println( i + " = " + findMethord(i));}}public static String findMethord(int weight) {//代表权重int qrvs = 1;//代表商int uh = weight;//代表余数int yuuu = 1;//公式的字符串String formula = "";while(uh > 0) {yuuu = uh % 3;if(yuuu == 1) {formula = "+" + qrvs + formula;}if(yuuu == 2) {uh = uh + 1;formula = "-" + qrvs + formula;}uh = uh / 3;qrvs *= 3;}formula = formula.substring(1);return formula;}}

【蓝桥java】进制与整除之天平秤重相关推荐

  1. java进制转换代码

    java进制转换代 定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头 需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; Sy ...

  2. java进制转换界面,java进制转换器 图形用户界面 十进制及其相反数诀别转化为二,四,八,十六进制...

    java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制 package com.rgy.Test; import java.awt.Color; import java.aw ...

  3. Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

    java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...

  4. Java进制转换(二进制、八进制、十进制、十六进制)

    Java进制转换(二进制.八进制.十进制.十六进制) 1. 二进制转其它进制 二进制转八进制 String i="1001";System.out.println(Integer. ...

  5. java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!

    2进制CPU使用,8进制很少见,10进制适合人类使用,16进制适合编译器和底层程序员使用,希望对你有所帮助! 以下文章是自己从别的地方复制粘贴过来, 总结了一下. 虽然看着有点乱, 但是想学 ,就能看 ...

  6. java进制转化_【Java学习笔记之四】java进制转化

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  7. 【Java学习笔记之四】java进制转化

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  8. java 进制转换 十进制转二,八,十六进制

    十进制转其他进制 因为在java中位运算符是直接对数值的二进制数进行操作的 并且 写的是二进制数在输出和操作时是以十进制数的形式: 所以十进制转二,八,十六进制:就已经实现了二进制,八进制,十进制,十 ...

  9. 不怂Java进制转换(洛谷P1143题题解,Java语言描述)

    感慨 Java也能这么好使啊,不容易-- --进阶的JFarmer 题目要求 P1143题目链接 分析 进制转换其实也还好,但既然用了Java,那就得扬眉吐气一次,体会体会利用API轻松秒题的感受,机 ...

最新文章

  1. SQL*Plus 说明
  2. Oracle 查看library cache 解析命中率
  3. 知乎回答多线程爬虫案例
  4. 轻松简单地开发Web Services 2
  5. java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
  6. SQL Server 中的case when then else 中的结果类型
  7. postman断言作用及怎么使用
  8. MFC的Application Wizard所生成的各种文件功能
  9. 3dmax材质丢失插件_3dmax插件排行|室内设计师效果图用疯狂模渲大师,怎么把cononra材质转换成vray材质?...
  10. 相亲之战,以少胜多乎?
  11. Python POST登陆linkedin分析(完),完整实现过程
  12. linux db2 64位下载,DB2(Linux 64位)安装教程
  13. uib-datepicker-popup使用
  14. B端产品运营基本工作内容
  15. 51单片机数码管滚动显示学号_单片机数码管显示0到9程序代码
  16. 通常人们说i5处理器的计算机其中二五是指,计算机cpu?学会看CPU只要五分钟
  17. 669-Server端如何感知客户端的状态
  18. Jetpack Room 使用及原理解析
  19. python egg_Python的egg包
  20. Red Team后漏洞利用秘籍:如何使用C#语言实现系统调用

热门文章

  1. ceph bluestore源码分析:C++ 获取线程id
  2. 【Java_基础】Java中Native关键字的作用
  3. node 实现blog博客
  4. 对学习编译原理的看法
  5. solr单机版的搭建
  6. 关闭ubuntu启动时System Program Problem Detected提示
  7. 张孝祥javascript学习笔记1---HTMLCSS
  8. Linux--档案/目录 权限及修改
  9. 水晶报表调用存储过程的问题
  10. CMake学习(一)