B2094 不与最大数相同的数字之和 题解

· · 题解

题目传送门

对于这道题,我们可以从反方向去想:

s 为所有数之和,m 为最大数,t 为最大数的个数,ans 为不与最大数相同的数字之和,则 ans 可以这样计算:

ans=s-m \times t

s,直接一个一个加起来就行了。

m,我们可以使用 C++ STL 中的sort()函数。由于不是这篇题解的重点,这里就不多说了,想知道更多的可以看这里。

这里重点想说的是求 t 的方法。

我们固然可以一个一个数去判断,但实际上我们还有更方便的方法:使用count()函数。

使用count()函数时,须引用algorithm头文件。它的参数是count(first,last,value)。其中first是容器的首迭代器,last是容器的末迭代器,value是询问的元素。它的功能是统计容器中等于value元素的个数。有关count()函数的更多知识,可以看这里和这里。

以下是代码。

#include<iostream>
#include<algorithm>
using namespace std;
int n,a[200],s,m,t,ans; 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        s+=a[i];
    }
    sort(a+1,a+n+1);
    m=a[n];
    t=count(a+1,a+n+1,m);
    ans=s-m*t;
    cout<<ans;
    return 0;
}