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

【问题描述】
你有一架天平和 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());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【定时同步系列1】定时同步之MARTIN OERDER算法原理与公式推导

关注公号【逆向通信猿】,口令:OM算法 信号模型 接收到的信号(PAM)或等效的低通信号(QAM,PSK)可以写为 r ( t ) = ∑ n = − ∞ ∞ a n g T (

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

文章目录一、时间复杂度二、空间复杂度三、相关题目一、时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n)&#xff0c;它是该算法问题规模n的函数&#xff0c;时间复杂度主要分析T(n)的数量级。算法中基本运算&#xff08;最深…

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e

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

【问题描述】 对于一棵多叉树&#xff0c;我们可以通过 “左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。换句话说&#xff0c;每个结点可以选任意子结点作为左孩子&#xff0c;并按任…

activiti脚本任务_Activiti中的高级脚本:自定义配置注入

activiti脚本任务脚本任务可能是Activiti代码库中“最古老的”类之一&#xff0c;但是我认为它仍然未被许多人使用。 &#xff08;感知到的&#xff09;缺点当然是性能&#xff08;解释还是编译&#xff09;&#xff0c;并且从IDE角度来看支持较少。 但是&#xff0c;好处&…

【锁相环系列3】QPSK+基带+Costas锁相环载波同步(重点环路滤波器参数设置和迭代核心代码详解)

引言 假设在QPSK信号解调中,完成匹配滤波、定时抽样后的星座如下所示 而画出基带信号部分点的星座图如下所示 由以上两幅图可以看出,基带信号中还存在微小的频偏,导致星座图旋转,而这种微小的频偏很难通过FFT估计出来,由此想到了用锁相环解决,锁相环锁定后的星座如下 …

第十二届蓝桥杯Java省赛A组试题:异或数列

【题目描述】 初始时&#xff0c;Alice和Bob分别有一个整数a和b&#xff0c;有一个给定的长度为n的数列。a和b的初始值均为0。Alice和Bob轮流操作&#xff0c;Alice先手&#xff0c;每步可以从两个选项中选一种&#xff1a; 选项1&#xff1a;从数列中选一个X;给Alice的数异或上…

自动化学科前沿讲座分享,作业,自动化与人工智能

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 现在我们都在讲智能制造&#xff0c;而实现智能制造&#xff0c;需要有传统制造的部…

线性移位寄存器序列(m序列)之MATLAB实现

移位寄存器的结构 nnn级线性移位寄存器的结构如下图 当生成多项式g(x)g(x)g(x)为本原多项式时&#xff0c;产生的序列为m序列。例如 g(x)x5x21g(x)x^5x^21g(x)x5x21的本原多项式&#xff0c;初态为10000的5级m序列&#xff0c;其周期为25−1312^5-13125−131&#xff0c;结构如…

江南大学物联网工程学院数据库课程实验一作业1实验报告

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 一、开发环境 DBMS&#xff1a;Microsoft SQL Server 2019 (…

BCH码和m序列参数估计(梅西迭代算法求多项式的MATLAB实现)

关注公众号【逆向通信猿】试读更多内容!!! 伯利坎普迭代算法解决了BCH码译码中求错位多项式 σ ( x ) \sigma (x) σ(x)的问题,即用迭代算法求解方程组,极大地加快了译码速度。求最短线性移存器的迭代算法是梅西(J.Massey)于1969年提出的,而且指出了与BCH码迭代译码算…

scala和java像不像_关于Java和Scala同步的五件事你不知道

scala和java像不像实际上&#xff0c;所有服务器应用程序都需要在多个线程之间进行某种同步。 大多数同步工作是在框架级别为我们完成的&#xff0c;例如通过我们的Web服务器&#xff0c;数据库客户端或消息传递框架。 Java和Scala提供了许多组件来编写可靠的多线程应用程序。 …

江南大学物联网工程学院数据库课程实验二作业2实验报告

一、开发环境 DBMS: Microsoft SQL Server 2019 (64- bit) 可视化管理工具: Microsoft SQL Server Management Studio- 18.10 二、代码、注释及测试 第三题 --创建客户表并且添加数据 create table customers( cnum varchar(5) primary key, --将客户编号设置为主键&#x…

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

使用JDK 11在Java字符串上的新方法

Java的String类似乎将在JDK 11中获得一些新方法&#xff0c;该方法将于2018年9月发布。 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() “使用专用的分隔符从源字符串中懒惰地提供行的字符串实例方法。” JDK-8200378 String :: strip&#x…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…

fftw库在windows下的的编译和配置

目录运行环境FFTW库的下载FFTW库的生成VS2017添加fftw库步骤运行环境 Visual Studio 2017 企业版 FFTW库的下载 首先在官网上下载fftw-3.3.5-dll32或fftw-3.3.5-dll64压缩包&#xff0c;解压。本人已经编译生成好的库下载地址&#xff1a;https://download.csdn.net/downloa…

深度学习在机器视觉应用领域的最新研究综述(物联网技术应用大作业)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 摘要&#xff1a;机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c…