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