【无标题】

原题链接

【题目描述】

输出一个整数数列中不与最大数相同的数字之和。

【输入】

输入分为两行:

第一行为N(N为接下来数的个数,N <= 100);

第二行N个整数,数与数之间以一个空格分开,每个整数的范围是-1000,000到1000,000。

【输出】

输出为N个数中除去最大数其余数字之和。

【输入样例】

3
1 2 3

【输出样例】

3

numeric 里面的 accumulate应该不常用吧  ,对我来说我开始首选for 或者while遍历数组求和

#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;

int main () {

    int n;
    cin >>  n;
    vector<int> shuzu;

    for(int i=0; i < n;++i) { // 输入n个数
        int num;
        cin >> num;
        shuzu.push_back(num);
    }

    //排序
    sort(shuzu.begin() , shuzu.end() );

    int maxnum = shuzu[n-1];
    shuzu.pop_back();
    for(int i =n-2 ; i >= 0;--i) {
        if(shuzu[i] == maxnum) {
            shuzu.pop_back();
        } else {
            break;
        }
    }

    int sum = accumulate(shuzu.begin() , shuzu.end() ,0 ) ;

    cout << sum << endl;




    return 0;

}
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
#include<numeric>
#include<unordered_map>

using namespace std;

int main () {

    int n;
    cin >> n;
    vector<int > shuzu(n);
    for(int i=0 ; i < n;++i) {
        cin >> shuzu[i];
    }
    
    unordered_map<int,int> num_count;
    int maxnum = shuzu[0];
    
    for(int num : shuzu) {
        num_count[num]++;
        if(num > maxnum) {
            maxnum = num;
        }
    }
    
    int result = 0;
    for(const auto & pair : num_count){
        if(pair.first  != maxnum) {
            result += pair.first * pair.second;
        }
    }
    
    cout << result << endl;
    return 0;

}

再写个哈希表的版本 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值