【巧用进制】天平称重问题
2023-03-14 09:45:20 时间
注意程序输出:+号代表放在左盘,-号放在右盘。
思路:联想二进制枚举,这里显然其实是一种三进制枚举。 这里本质上是选或不选的问题,就是要将砝码放左or放右即+or-表达式的问题。但是得到的三进制值是由0 1 2组成,不好准确的表达是选还是不选的问题,于是我们可以想办法把0 1 2变成1 0 -1。于是我们可以对三进制数2进行进位操作,然后在减1,这样就把三进制全部变成由1 0 -1组成的了。再转换成十进制解决问题。
例如用户输入数字5,那么它的三进制为1 2,现在对2加1减1,得到2 -1,然后在对2加1减1,得到1 -1 -1,这样再转换成十进制为9-3-1。这样成功解决问题。
代码:
1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 public class 天平称重 { 6 7 public static void main(String[] args) { 8 //System.out.println(Integer.toString(1000000, 3)); 9 Scanner scanner = new Scanner(System.in); 10 int N = scanner.nextInt(); 11 // 转成3进制 12 final String x = Integer.toString(N, 3); 13 // 翻转后转成字符数组,方便进行进位操作 14 char []arr = new StringBuilder(x).reverse().toString().toCharArray(); 15 // 容器放处理之后的0 -1 1 16 List<Integer> list = new ArrayList<>(); 17 for (int i = 0; i < arr.length; i++) { 18 if (arr[i]=='2') { 19 list.add(0, -1);// -1插在开头 20 if (i==arr.length-1) { 21 list.add(0, 1);// 最后一个字符,进位 22 }else { 23 ++arr[i+1]; // 否则,对下一个数字加1 24 } 25 }else if (arr[i]==3) { 26 list.add(0, 0); 27 if (i==arr.length-1) { 28 list.add(0, 1); 29 }else { 30 ++arr[i+1]; 31 } 32 }else { 33 // arr[i] - '0' 表达的是字符转数字 34 list.add(0, arr[i] - '0'); // 为0或1的话,直接插入数组开头, 35 } 36 } 37 StringBuilder sb = new StringBuilder(); 38 for (int i = 0; i < list.size(); i++) { 39 if (list.get(i)==1) { 40 sb.append("+").append((int)Math.pow(3, list.size()-i-1)); 41 } 42 if (list.get(i)==-1) { 43 sb.append("-").append((int)Math.pow(3, list.size()-i-1)); 44 } 45 } 46 System.out.println(sb.substring(1)); 47 } 48 49 }
结果:
相关文章
- 通过 OverProvisioning 提高EKS弹性伸缩效率
- python ipython 包
- Amazon GameTech架构最佳实践系列 —— MOBA/FPS网络加速篇
- Amazon GameTech 架构最佳实践系列 —— MOBA/FPS数据分析篇
- 快速搭建 AWS Glue ETL 开发环境
- 通过亚马逊云科技Marketplace中合作伙伴(Zenlayer)的产品来加速Amazon S3的访问
- 手把手教程|构建无服务器通用文本识别功能
- Amazon EC2 Spot 实例在AWS EMR 集群中的成本优化应用实践
- 加快企业转型和创新的 5 个步骤
- 基于 Amazon Lambda 的无服务器视频转码方案
- Karpenter : 新一代 Kubernetes auto scaling 工具
- 使用Kubeadm在亚马逊云科技国内区域自建Kubernetes集群 (一) 自建Kubernetes集群和挂载持久化存储
- 通过 Amazon CloudFront 实时日志快速构建自定义的 CDN 监控
- 在多账户场景下将 Amazon WAF 安全自动化解决方案与 Amazon Firewall Manager 结合使用
- 静态属性 java_java静态属性初始化注意
- 使用 Amazon WAF 进行 Captcha人机验证
- 扩展 Amazon SageMaker PyTorch 容器
- 全面的技能培养加快云成果的实现
- Amazon EKS 版本管理策略与升级流程
- 基于 Amazon SageMaker 利用 MONAI 处理医疗影像数据最佳实践