【发布时间】:2020-01-15 05:44:59
【问题描述】:
我必须从 5 个数组中找到 4 个数字的最大和,并以相同的方式找到最小和。我的代码在一些较大的测试用例中失败,因为由于某种原因最大值变为负数
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int minimini(int list[]){
int minisum=0;
int taker;
int a=max({list[0],list[1],list[2],list[3],list[4]});
for (int i=0; i<5; i++){
taker=list[i];
if(taker!=a){
minisum=minisum+taker;
}
}
return minisum;
}
int maxa(int list[]){
int maxsum=0;
int taker;
int a=min({list[0],list[1],list[2],list[3],list[4]});
for (int i=0; i<5; i++){
taker=list[i];
if(taker!=a){
maxsum=maxsum+taker;
cout<<"maxsum >>"<<maxsum;
cout<<"a="<<a;
}
}
return maxsum;
}
int main(){
int list[5];
int minisum, maxsum;
for (int i=0; i<5; i++){
cin>>list[i];
}
minisum=minimini(list);
maxsum=maxa(list);
cout<<minisum<<" "<<maxsum;
return 0;
}
【问题讨论】:
-
有没有想过当列表中有多个最小/最大元素副本时会发生什么?
-
您可以对 5 的数组进行排序(例如,使用
std::sort)。那么最小和是前4个元素的和,最大和是后4个元素的和,不是吗? -
我的代码在一些较大的测试用例中失败:这可能是溢出问题吗?你能提供失败的示例输入吗?
-
输入是否有限制范围? (考虑一下当所有数字都是
INT_MAX / 2时会发生什么。) -
@Scheff 输入 -> 256741038、623958417、467905213、714532089、938071625
标签: c++