【发布时间】:2020-09-18 05:15:45
【问题描述】:
我正在解决一个问题,我必须编写一个函数来查找传递给它的数组中任意四个整数的最大和最小和,然后显示它。
这是我的代码:
void miniMaxSum(vector<int> arr) {
int minsum=0;
int maxsum=0;
int l1,l2,l3,l4;
int s1,s2,s3,s4;
l1=arr[0];
s1=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l1<arr[i])
l1=arr[i];
if(s1>arr[i])
s1=arr[i];
}
l2=arr[0];
s2=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l2<arr[i]&&arr[i]!=l1)
l2=arr[i];
if(s2>arr[i]&&arr[i]!=s1)
s2=arr[i];
}
l3=arr[0];
s3=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l3<arr[i]&&arr[i]!=l2&&arr[i]!=l1)
l3=arr[i];
if(s3>arr[i]&&arr[i]!=s2&&arr[i]!=s1)
s3=arr[i];
}
l4=arr[0];
s4=arr[0];
for(int i=1;i<arr.size();++i)
{
if(l4<arr[i]&&arr[i]!=l2&&arr[i]!=l1&&arr[i]!=l3)
l4=arr[i];
if(s4>arr[i]&&arr[i]!=s3&&arr[i]!=s2&&arr[i]!=s1)
s4=arr[i];
}
minsum=s1+s2+s3+s4;
maxsum=l1+l2+l3+l4;
cout<<minsum<<" "<<maxsum;
}
这段代码给出了 maxsum 的正确输出,但所有测试用例中的 minsum 都是错误的。 请帮我找出代码中的错误 提前致谢。
【问题讨论】:
-
如果在最小值或最大值 4 中有重复的元素,此算法将失败。您是否考虑过对数组进行排序,只查看第一个和最后 4 个?
-
@cigien 对于没有重复的数组,它也失败了。
-
对于输入 1,2,3,4,5 结果应该是 10 14 但它给出 4 14,为什么@cigien 请告诉
-
好吧,你为什么不提供一个失败的测试用例,并显示预期输出和实际输出。
-
因为你将
ss初始化为arr[0],这是最小的元素,只有找到更大的元素才更新,这是不可能的。所以你所有的ss 都是 1。
标签: c++ arrays algorithm c++11