1 条题解

  • 0
    @ 2026-1-28 15:24:34
    #include<bits/stdc++.h>
    using namespace std;
    
    int arr[10100];     // 存储输入的扑克牌数值
    int sum[10000];     // 存储所有两张牌的求和结果
    
    int main(){
        int n; // [1] 输入的扑克牌数量
        cin >> n;
        
        // [2] 输入所有扑克牌的数值
        for(int i = 0; i < n; i++) cin >> arr[i];
        
        int x = 0; // [3] sum数组的索引,记录已存储的和的数量
        
        // [4] 双重循环:遍历所有两张牌的组合,计算和并存入sum数组
        for(int i = 0; i < n; i++){
            for(int j = i + 1; j < n; j++){
                sum[x] = arr[i] + arr[j];
                x++;
            }
        }
        
        // [5] 对所有和进行升序排序
        sort(sum, sum + x); 
        
        int sun = 1; // [6] 统计不重复和的数量,初始为1(至少有一个和)
        
        // [7] 遍历排序后的和数组,统计不重复的数量
        for(int i = 1; i < x; i++){
            // 当前和与前一个不同,说明是新的不重复值
            if(sum[i] != sum[i-1]) sun++;
        }
        
        // [8] 输出不重复和的数量
        cout << sun << endl << sum[0] << " ";
        
        // [9] 输出所有不重复的和
        for(int i = 1; i < x; i++){
            if(sum[i] != sum[i-1]) cout << sum[i] << " ";
        }
        
        return 0;
    }
    
    • 1

    信息

    ID
    1196
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者