s09235制作
小可的加法练习
时间限制:1秒 内存限制:128M
题目描述
给出一个整数序列,请求出这个整数序列中不与最大值相等的数据的总和
输入描述
第一行输入一个正整数n,表示该整数序列里面有n个数据(n<<100000)
第二行输入n个整数,表示这个整数序列,数据之间用空格间隔,每个数据ai的范围是(-2^{30}\leq(−230≤ai\leq2^{30})≤230)
输出描述
输出一个数据,表示符合条件数据的总和
输入样例
4
1 2 2 3
输出样例
5
读了题目,我们得知,这道题是让我们在一串数中去最大值求和,再此我提供两种方法。
方法一:
我们可以求出最大值,把不等于最大值得数累加求和,关键代码:
for(int i=1;i<=n;i++){
if(a[i]!=maxx){
sum+=a[i];
}
}
我的代码是这样的:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a[100001],maxx=0,sum=0,maxxx=0;
int main(){
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i];
if(a[i]>maxx){
maxx=a[i];
}
}
for(ll i=1;i<=n;i++){
if(a[i]!=maxx){
sum+=a[i];
}
}
cout<<sum;
}
方法二:
还可以用sort先排完序,把不等于a[n]的数累加求和,关键代码:
sort(a+1,a+n+1);
for(ll i=1;i<=n;i++){
if(a[i]!=a[n]){
ans+=a[i];
}
}
我的代码是这样的:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=100000;
ll n,a[N],ans;
int main(){
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(ll i=1;i<=n;i++){
if(a[i]!=a[n]){
ans+=a[i];
}
}
cout<<ans;
return 0;
}
温馨提示:仅供参考