蓝桥杯 历届真题 砝码称重
【摘要】 问题描述:你有一架天平和 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)