【问题描述】
你有一架天平和 N个砝码,这N个砝码重量依次是W1, W2, …, Wn。
请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边。

【输入格式】
输入的第一行包含一个整数N。
第二行包含N个整数: W1, W2, W3, … Wn。

【输出格式】
输出一个整数代表答案。

【样例输入】
3
146

【样例输出】
10


解题思路:①有第一个砝码:x1,则可测出的重量有x1;②有第二个砝码:x2,则可测出的重量有x1、x1+x2、|x1-x2|、x2(相同的仅算一次);③有第三个砝码:x3,则可测出的重量有x1、x1+x2、|x1-x2|、x2、x1+x3、|x1-x3|、x1+x2+x3、|x1+x2-x3|…(相同的仅算一次)。基于上述分析,我们需要使用不存储相同数据的HashSet来存储结果更为方便,而对于每增加一个砝码可能产生的情况,我们可以把前一个砝码产生并存储的情况拿过来与之进行处理产生更多的情况并存储。


Java代码:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();//使用HashSet对能够称出的重量进行存储,因为HashSet不能存储相同值正是我们需要的。HashSet<Integer> weightCase = new HashSet<>();//将第一个砝码值直接存进去int first = scanner.nextInt();weightCase.add(first);//从第二个砝码开始while (n > 1){int x = scanner.nextInt();//借助一个临时HashSet存储该砝码加入时与前面的砝码配合可能产生的情况HashSet<Integer> temp = new HashSet<>();//遍历weightCaseIterator<Integer> iterator = weightCase.iterator();while (iterator.hasNext()){int t = iterator.next();temp.add(t + x);temp.add(Math.abs(t - x));}//将添加该砝码之后可得的重量情况存储进去weightCase.addAll(temp);weightCase.add(x);n--;}//除去重量为0这种情况weightCase.remove(0);System.out.println(weightCase.size());}
}
import java.util.HashSet;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);HashSet<Integer> set = new HashSet<>();int n = scanner.nextInt();set.add(scanner.nextInt());for (int i = 1; i < n; i++) {int fama = scanner.nextInt();HashSet<Integer> temp = new HashSet<>();for (Integer item : set) {temp.add(item + fama);temp.add(Math.abs(item - fama));}temp.add(fama);set.addAll(temp);}set.remove(0);System.out.println(set.size());}
}

第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码相关推荐

  1. 十二届蓝桥杯省赛B组C++解析(填空题部分)

    十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...

  2. 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解

    2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...

  3. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  4. 2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径

    2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径 代码 试题 E: 路径 Ans=10266837 我哭了 最短路径的题考前刷了多少道,最后还是在考场翻车 还是太菜啊啊.. 首先是边权图的初 ...

  5. 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解

    Problem A 空间 计组基础题:256MB=256 * 2^20 * 8 位 所以存放32位元素可以存放 256 * 1024 * 1024 * 8 / 32 ans: 67108864 送分题 ...

  6. 2021年第十二届蓝桥杯省赛B组C/C++部分填空题解

    题A: 看到题意很容易算出答案就是256乘1024乘1024乘8除以32 答案:67108864 题B: 直接模拟就好了,用一个数组来记录每个数字的次数,暴力到数组该数字不够时,就不能表示完这个数字. ...

  7. 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)

    目录 #A 浮点数 #B 求余 #C 双阶乘 #D 格点 #E 整数分解 #F 3 的倍数 #G 特殊年份 #H 小平方 #I 完全平方数 #J 负载均衡 #A 浮点数 本题总分:5 分 问题描述 I ...

  8. 第十二届蓝桥杯省赛:试题 A: 卡片(Java)

    本题总分:5 分 [问题描述] 小蓝有很多数字卡片,每张卡片上都是数字0到9. 小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了. 小蓝想知道自己能 ...

  9. 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

    [问题描述] 对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树.如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一.换句话说,每个结点可以 ...

最新文章

  1. redis安全与管理
  2. mysql 多表查询or_MySQL 多表查询
  3. 跟着JAMA论文学习重复测量资料分析方法
  4. 低成本、高性能创客开发板——PYB Nano
  5. 零基础学Python-爬虫-4、下载网络图片
  6. iReport序号自增列
  7. node中的js-核心模块
  8. UVa 489 - Hangman Judge
  9. java实现封装的三步是_JAVA基础-封装
  10. 使用hive完成统计分析功能
  11. 教你在Kubernetes中快速部署ES集群
  12. 使用 FOR XML语句 将查询结构作为XML格式返回【转】
  13. Visual Studio 2015 移动跨平台开发初体验
  14. C# 二维码生成代码
  15. 好佳居软装十大品牌 各种风格的窗帘这样搭配,瞬间精致美观
  16. 【书影观后感 五】你的名字
  17. 扫地机器人水箱背景_智能扫地机器人电控水箱与普通水箱的区别。
  18. 陷波滤波器消除周期噪声python_车载功放本底噪声的机理及对策 wdele
  19. 神经网络学习小记录52——Pytorch搭建孪生神经网络(Siamese network)比较图片相似性
  20. 主流数据类型及其特点

热门文章

  1. 拼图项目:延期的后果
  2. Spring vs Guice:重要的一个关键区别
  3. 带有谓词的Java中的功能样式-第1部分
  4. 通过示例休眠–第1部分(删除孤儿)
  5. python预处理标准化_tensorflow预处理:数据标准化的几种方法
  6. Linux命令中的$()和${}的区别
  7. 关于压缩工具 7z(7-zip) 的选项 -x(排除文件)的解读
  8. java 中允许键重复的,二叉搜索树的定义是否允许重复键?
  9. C++ 11 深度学习(十)原始字面量
  10. php验证码 php中文网,ThinkPHP 使用不同风格及中文的验证码