【蓝桥java】进制与整除之天平秤重
题目:
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有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】进制与整除之天平秤重相关推荐
- java进制转换代码
java进制转换代 定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头 需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; Sy ...
- java进制转换界面,java进制转换器 图形用户界面 十进制及其相反数诀别转化为二,四,八,十六进制...
java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制 package com.rgy.Test; import java.awt.Color; import java.aw ...
- Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)
java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...
- Java进制转换(二进制、八进制、十进制、十六进制)
Java进制转换(二进制.八进制.十进制.十六进制) 1. 二进制转其它进制 二进制转八进制 String i="1001";System.out.println(Integer. ...
- java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!
2进制CPU使用,8进制很少见,10进制适合人类使用,16进制适合编译器和底层程序员使用,希望对你有所帮助! 以下文章是自己从别的地方复制粘贴过来, 总结了一下. 虽然看着有点乱, 但是想学 ,就能看 ...
- java进制转化_【Java学习笔记之四】java进制转化
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- 【Java学习笔记之四】java进制转化
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- java 进制转换 十进制转二,八,十六进制
十进制转其他进制 因为在java中位运算符是直接对数值的二进制数进行操作的 并且 写的是二进制数在输出和操作时是以十进制数的形式: 所以十进制转二,八,十六进制:就已经实现了二进制,八进制,十进制,十 ...
- 不怂Java进制转换(洛谷P1143题题解,Java语言描述)
感慨 Java也能这么好使啊,不容易-- --进阶的JFarmer 题目要求 P1143题目链接 分析 进制转换其实也还好,但既然用了Java,那就得扬眉吐气一次,体会体会利用API轻松秒题的感受,机 ...
最新文章
- SQL*Plus 说明
- Oracle 查看library cache 解析命中率
- 知乎回答多线程爬虫案例
- 轻松简单地开发Web Services 2
- java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
- SQL Server 中的case when then else 中的结果类型
- postman断言作用及怎么使用
- MFC的Application Wizard所生成的各种文件功能
- 3dmax材质丢失插件_3dmax插件排行|室内设计师效果图用疯狂模渲大师,怎么把cononra材质转换成vray材质?...
- 相亲之战,以少胜多乎?
- Python POST登陆linkedin分析(完),完整实现过程
- linux db2 64位下载,DB2(Linux 64位)安装教程
- uib-datepicker-popup使用
- B端产品运营基本工作内容
- 51单片机数码管滚动显示学号_单片机数码管显示0到9程序代码
- 通常人们说i5处理器的计算机其中二五是指,计算机cpu?学会看CPU只要五分钟
- 669-Server端如何感知客户端的状态
- Jetpack Room 使用及原理解析
- python egg_Python的egg包
- Red Team后漏洞利用秘籍:如何使用C#语言实现系统调用