黑客级别的Mini-Max Sum

hacker rank Mini-Max Sum

本文关键字:Mini-Max Sum 黑客      更新时间:2023-10-16

这个问题

我通常会删除默认代码,然后自己开始解决整个问题。然而,hackerlink测试用例显示的输出与每当我针对自定义输入运行时出现的输出不同。为什么它显示不同的数字?

请记住,我尝试过不同的输入大小,如float、long-long-int、int和double;

#include <bits/stdc++.h>
using namespace std;
int main() {
long long int arr[5], neglect = 0, min = 9999999999999, max = 0, curr = 0; 
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
while (neglect < 5) {
for (int i = 0; i < 5; i++) {
if (i == neglect) {i++;}
curr += arr[i];
}
if (curr < min) {min = curr;}
if (curr > max) {max = curr;}
//cout << curr << endl;
//cout << curr << " " << min << " " << max << endl;
curr = 0;
neglect++;
}
cout << min << " " << max;
}

我只想用一种方法来解决它,尝试所有的组合,然后显示最小值和最大值。我知道我的代码不是解决它的最佳方法,我知道我可以对数组进行排序,排除第一个和最后一个元素,但请耐心等待。

输入:1 2 3 4 5声称输出:11 4198826

但当我用相同的自定义输入和注释行调试它时,它显示:

14 14 14
13 13 14
12 12 14
11 11 14
10 10 14
10 14

这难道不意味着我的代码应该可以工作吗?

当忽略最后一个元素时,您正在执行i++,这将把arr[5]添加到curr值中,但arr[5]超出了数组的范围,因此可能会产生segfault或意外结果。

我建议您不要在for循环中增加i,相反,当您想忽略元素时,可以使用continue。

for (int i = 0; i < 5; i++) {
if (i == neglect) {
continue;
}
curr += arr[i];
}

此外,您可以将外部for循环替换为while循环,这样就不必手动增加忽略。