5个砝码的java代码_五个砝码

五个砝码

原题链接

题目描述

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

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

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

解:

观察到1,3,9,27,81均为3的倍数,故考虑利用进制来做:

每个砝码可以放左盘或者右盘或者不放,刚好有三种状态,例如:5 = 12(3)

"1"可以表示取用该砝码,由于一个砝码只能取用一次,那如何"2"呢,进一步考虑,可以采取进位的方式:

1 2 = 2 -1 = 1 -1 -1

让"-1"表示该砝码放在右盘即可。

import java.util.*;

public class Main {

static ListInteger res = new ArrayList();

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int N = in.nextInt();

int carry;

int num;

while(N 0){

carry = (N % 3 == 2) 1:0;

num = (N % 3 == 2)-1:(N + carry)%3;

res.add(num);

N = N / 3 + carry;

}

System.out.print((int)Math.pow(3,res.size() - 1));

for(int i = res.size() - 2; i = 0; i--){

if(res.get(i) == -1)

System.out.print("-"+(int)Math.pow(3,i));

else if(res.get(i) == 1)

System.out.print("+"+(int)Math.pow(3,i));

}

}

}

五个砝码 相关文章

力扣236. 二叉树的最近公共祖先

原题 1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q:

洛谷-P2813 母舰

洛谷-P2813 母舰 原题链接:https://www.luogu.com.cn/problem/P2813 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 C++代码 题目背景 广东汕头聿怀初中 Train#3 Problem 1 (有没有红警既视感~) 题目描述 在小A的星际大战游戏中,一艘强力

CodeForces 1307D BFS最短路 思维

原题链接 题意 给出一个简单无向图,边权全部为1,同时给我们k个特殊点,要求我们从这k个特殊点中选出两个来连一条边权为1的边。同时,我们的决策要保证1~n的最短路程最大,求最终这个最短路长度。 思路 首先因为边权都为1,所以我们可以BFS来求出最短路。而

小木棍

小木棍 题目描述 原题来自:题目链接 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过 50 。现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。给出每段小木棍的长度,编程帮他找出原始木棍

AcWing 273. 分级

原题链接 考察:线性DP 思路: 通过证明(dfs打表) 可以发现存在一个最优解,它的数字全部在A数组里出现过. 考虑根据最后一个数字设置状态转移方程,f[i][j]代表考虑前i个数,最后一个数字是a[j](b数组是非严格单调序列,和上题一样考虑,我们需要知道它的末尾值).f

AcWing 272. 最长公共上升子序列

原题链接 考察:线性DP 最长上升子序列+最长公共子序列的综合版 思路: 要写这道题必须明白最长上升子序列+最长公共子序列的推导过程. 由最长上升子序列: 它的状态是由倒数第二个数字来分类,也就是说我们必须固定倒数第一个数字 由公共子序列: 有a[i]b[j]的有

AcWing 1010. 拦截导弹

原题链接 考察:线性dp 思路: 第一问是套模板. 第二问的思路是要想到增加序列个数的条件.由贪心法,我们求不上升子序列的组数.对于一个数x,假设已有两组a,b.如果a,b内没有比x更大的数.说明我们需要重新开辟一组.如果x较小,因为不允许插入,所以我们只能在末尾加

AcWing 281. 硬币

原题链接 考察:多重背包dp 实际上是考察多重部分和的问题. 在本题如果直接用二进制优化时间复杂度是10 8 会TLE.因此必须优化 多重背包问题中f[j] = 1是因为上一轮f[j] = 1或者本轮f[j-v] = 1.如果f[j]在枚举第i-1种硬币时就已经为1,那么f[j]在第i轮就没必要

五个Python奇技淫巧你都知道吗

1、isinstance isinstance 函数可用于判断实例的类型,其实它的第二个参数可以是多个数据类型组成的元组。例如: isinstance(x, (int, float))# 等价于isinstance(x, int) or isinstance(x, float) 类似的函数还有字符串的 startswith 方法和 endswith 方法

AcWing 532. 货币系统

原题链接 考察:完全背包dp+线性代数 思路: 这道题其实是求给定a数组的极大无关向量组. 这里要能分析出一些性质: 如果(a,n)能被(b,m)所替代,那么a数组能被b数组表示 b数组中gcd1的一对数,大的没必要存在 b数组是a数组的一部分元素. 假设b数组能表示a数组,且存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值