原题链接
【题目描述】
输出一个整数数列中不与最大数相同的数字之和。
【输入】
输入分为两行:
第一行为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;
}
再写个哈希表的版本