蓝桥杯 历届真题 砝码称重

举报
西红柿炒鸡蛋儿 发表于 2022/03/23 20:06:20 2022/03/23
【摘要】 问题描述:你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · WN请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边输入的第一行包含一个整数 N第二行包含 N 个整数:W1, W2, W3, · · · WN输出一个整数代表答案输出一个整数代表答案样例输入31 4 6样例输出10import java.util.ArrayList;import ja...

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

输入的第一行包含一个整数 N
第二行包含 N 个整数:W1, W2, W3, · · · WN输出一个整数代表答案
输出一个整数代表答案

样例输入
3
1 4 6
样例输出
10

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
 
public class Main{
 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 接收砝码的数量
		int length = sc.nextInt(); 
		//用来去重(砝码可以称出的重量)
		Set<Integer> set = new HashSet<>(); 
		//用来遍历重量
		List<Integer> list = null;; 
		
	    //先添加进去第一个砝码
		set.add(sc.nextInt());
		
		//这里注意减1,因为已经添加进去一个砝码
		for(int i = 0; i < length -1; i++) {
			
			//接收剩下的砝码
			int num = sc.nextInt(); 
			
			//set集合转为list集合,用来遍历
			list =  new ArrayList<>(set);
			
			//遍历重量
			for(Integer target : list) {
				/**每次从list中拿出一个重量,都要和新放进去的砝码
				 * 进行操作并加入set中加入:
				 * 新砝码  + 重量
				 * 新砝码  - 重量(考虑到可能是负数,所以要加Math.abs()函数求绝对值)
				 * 新砝码本身
			    **/
			    set.add(Math.abs(target - num));
				set.add(num + target);
				set.add(num);
			}
		}
	
		//最后输出set的长度,就是砝码求出的重量数,注意记得减1
		//因为当新砝码和重量一致时,相减得到0,而0这个重量是称不出来的
		System.out.println(set.size() -1);
	}
		
	
	
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。