5个砝码

用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。

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

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

例如:

用户输入:

5

程序输出:

9-3-1

用户输入:

19

程序输出:

27-9+1

要求程序输出的组合总是大数在前小数在后。

可以假设用户的输入的数字符合范围1~121。 //方法1:三进制处理 package com.liu.ex1; import java.util.ArrayList; import java.util.Scanner; public class Main { public static int[] value = new int[6]; public void printResult(int n) { int count = 0; while(n > 0) { //把n转换为三进制数 value[count++] = n % 3; n = n / 3; } //对n的三进制数进行处理,得到砝码组合结果 for(int i = 0;i < 5;i++) { if(value[i] >= 2) { value[i] = value[i] - 3; value[i + 1] = value[i + 1] + 1; } } ArrayList list = new ArrayList(); for(int i = 5;i >= 0;i--) { if(value[i] == 1) { int a = (int) Math.pow(3, i); list.add(a); } else if(value[i] == -1) { int a = (int) (-1 * Math.pow(3, i)); list.add(a); } } System.out.print(list.get(0)); for(int i = 1;i < list.size();i++) { if(list.get(i) > 0) { System.out.print("+"); } System.out.print(list.get(i)); } return; } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); test.printResult(n); } } //方法2:DFS搜索 package com.liu.ex1; import java.util.ArrayList; import java.util.Scanner; public class Main1 { public static int[] value = {1,3,9,27,81}; public static int n = 0; public static ArrayList result = new ArrayList(); public int getSum() { int sum = 0; for(int i = 0;i < result.size();i++) sum += result.get(i); return sum; } public void dfs(int step) { if(step == 5) { if(getSum() == n) { int i = result.size() - 1; for(;i >= 0;i--) { if(result.get(i) != 0) { System.out.print(result.get(i)); i--; break; } } for(;i >= 0;i--) { if(result.get(i) == 0) continue; if(result.get(i) > 0) System.out.print("+"); System.out.print(result.get(i)); } } } else { for(int i = -1;i <= 1;i++) { int a = i * value[step]; result.add(a); dfs(step + 1); result.remove(result.size() - 1); } } } public static void main(String[] args) { Main1 test = new Main1(); Scanner in = new Scanner(System.in); n = in.nextInt(); test.dfs(0); } }

java能做称重软件_java实现砝码称重相关推荐

  1. java 批量重命名_Java实现文件批量重命名

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...

  2. 神医视频消重软件,集合了消重跟视频原创制作于一体神器

    你是不是还在为寻找智能自动视频批量消重工具而烦恼,这是一款结合了新型智能型去水印+多功能视频伪原创的综合最新版消重软件,经过处理的视频通过率可以高达95%以上!

  3. 怎么用java做随机选人软件_Java小程序:五人随机选一人并显示姓名

    该程序实现的是用空格键控制五个人编号的滚动(用Timer实现),当选定一个人的时候,显示其名字,具体界面如下: 此程序需要链接数据库,在此用的是Access数据库,数据链接的代码如下: import ...

  4. 软件设计师java选做题_软件设计师难考吗?如何复习?

    软件设计师属于软考中级.可能大家会觉得中级呀,听起来有点难,我一点基础也没有,怎么考中级啊. 大家不用慌,听上去好像很有难度,但如果你备考计划准备的好,其实是可以考过的.为什么考试通过率不高,百分之二 ...

  5. java 链接重排序_JAVA中JVM的重排序详细介绍

    重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段.重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境 在并发程序中,程序员会特别关注不同进程或 ...

  6. java多数做增删改查_Java 实现一个 能够 进行简单的增删改查的 超市管理系统

    1. 首先编写一个 Fruitltem 的商品类, 描述 商品的基本信息. 代码如下: 保证详细, 运行的起来, 有什么 问题也可以评论留言. /* * 自定义类, 描述商品信息 * * 商品的属性: ...

  7. 用java多线程做一个心形_java实现心形图案

    package Demo; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.aw ...

  8. java前端编程用什么软件_java前端开发的工具

    1 java前端开发的工具 在实际开发中,Java也有多个应用方向,手机开发.桌面开发.企业级应用开发.嵌入式开发等.所以学好Java,无疑多了一把通往成功大门的钥匙.下面小编给大家说说java前端开 ...

  9. 非修改md5视频去重消重软件视频去重视频消重怎么弄

    以个人的亲身经历告诉你答案:短视频用md5修改软件修改md5后,对去重消重毫无作用!!! 可能有些忽悠大神会告诉你修改md5可以将视频去重消重,我以前一开始还真的相信了,结果改了md5之后,把视频发布 ...

  10. mysql在计算机管理中的路径怎么修改_称重软件中的数据修改怎么知晓?

    称重软件 称重软件应客户需求,数据允许修改,但不允许删除只能作废.如果数据已修改,该如何知晓该数据是修改过的呢,这就用到了标记.用户修改数据时为保证数据的可追溯性,同样在数据安全方面也有相应的要求,要 ...

最新文章

  1. VC解决error C2065: 'timeGetTime' : undeclared identi
  2. .net 无法通过嵌套类型访问外部类型的非静态成员-解决方案
  3. python小游戏代码大全-【程序源代码】python贪吃蛇小游戏
  4. hdu4400 BFS+STL
  5. 【转】Yelp是如何实现每天运行数百万个测试的
  6. 今天的方灵起床了的飞鸽传书2011
  7. windowswps怎么以文件形式发送_手机WPS怎么以文件形式发送
  8. HDU 6178 Monkeys
  9. mysql导出kml_谷歌地图如何导出kml文件 导出kml文件教程
  10. 小米6android版本更新,钉子户小米6的新生,换电池、背盖,升级android11
  11. linux:进程管理与SELinux
  12. 数值分析期末考试复习(逼近问题)
  13. 唤醒屏幕_屏幕保护程序被困在Mac上?如何解决它
  14. 怎么修改chrome浏览器的字体
  15. activiti 获取审批人员_activiti,根据任务id获取该任务节点配置的获选人或者获选组...
  16. 程序员2022年薪资出炉:一线城市薪资中位数已破1.5万元,你工资涨了吗?
  17. [c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列
  18. PHP获取以毫秒级为单位获取当前时间
  19. strut-控制器ActionServlet类详解
  20. 直击人心的数据可视化设计作品

热门文章

  1. 手风琴效果案例(jQuery)
  2. Opencv实现颜色检测
  3. The Python Challenge Level-4 Solution
  4. SLG手游卡牌类游戏机器人逻辑算法
  5. docker开放远程服务
  6. 【DDR3_Electrical Characteristics and AC Timing】_ Setup,Hold and Slew Rate Derating
  7. OSPF的6种LSA
  8. python转换整数_在Python中将数字转换为整数列表
  9. 美军军事通信系统简史
  10. 设计模式---002适配模式(转载自我的老师 Alley-巷子)