【问题标题】:hacker rank Mini-Max Sumhackerrank Minimax Sum
【发布时间】:2020-07-12 14:57:59
【问题描述】:

this problem

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

请记住,我尝试了不同的输入大小,例如 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

这是否意味着我的代码应该可以工作?

【问题讨论】:

  • #include &lt;bits/stdc++.h&gt; using namespace std; - 永远不要那样做。见Why should I not #include <bits/stdc++.h>?Why is "using namespace std;" considered bad practice?
  • @JesperJuhl 谢谢你告诉我这件事。我不知道我的编码有那么糟糕。但是,我会尽力反思和改进。不过,我如何支持您的评论?因为我用谷歌搜索了它,显然应该有一个小三角形,但我找不到
  • 一旦您获得更多声望,您就可以为 cmets 投票。无论如何,别担心,我只是想指出一些明显的危险信号。

标签: c++ output


【解决方案1】:

当您忽略最后一个元素时,您正在执行i++,这会将arr[5] 添加到curr 值,但arr[5] 超出了数组的范围,因此它可能会给出段错误或出乎意料的结果。

我建议您不要在 for 循环中增加 i,而是在您想忽略该元素时使用 continue。

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

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

【讨论】:

  • continue 本身不会推进neglect。您可能应该建议他们将 while 循环更改为推进 neglect 的 for 循环。
  • 非常感谢。我没有想到这个想法,因为我认为当“i”等于 5 时它会自动退出循环。但显然我需要学习和编码更多。为什么我的代码在调试时显示正确的输出?
  • 如果您越界访问数组元素,则代码的行为是未定义的,它可能会工作或有时会失败。详细解释可以参考这个link
猜你喜欢
  • 2020-06-07
  • 1970-01-01
  • 2022-06-19
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多