【问题标题】:Code worked for sample run but fails on submission: Hackerrank problem代码适用于示例运行,但提交失败:Hackerrank 问题
【发布时间】:2019-04-03 19:40:03
【问题描述】:

我正在尝试解决问题https://www.hackerrank.com/challenges/mini-max-sum/problem,但我的代码在提交时失败。仅清除 15 个测试用例中的 5 个。我认为它与使用 64 位整数有关。我对此一无所知,也不知道是什么导致我的程序失败。

下面的程序展示了我的方法

void miniMaxSum(vector<int> arr) 
{
    int l = arr.size();
    sort(arr.begin(),arr.end());
    long long int min = arr[0] + arr[1] + arr[2] + arr[3];
    long long int max = arr[l - 1] + arr[l - 2] + arr[l - 3] + arr[l-4];
    cout<<min<<" "<<max<<endl;
}

编译器输出错误。我不知道我做错了什么请帮忙。

【问题讨论】:

  • long long int min = arr[0] + arr[1] + ...; 使用ints 进行计算,并将最终结果转换为long long。你可能想要long long int min = (long long)arr[0] + arr[1] + arr[2] + ...; 之类的东西。
  • 感谢它通过了所有测试用例:)

标签: c++


【解决方案1】:

您将左侧的值计算为int,然后将其分配给unsigned long long

为防止溢出,您应该将至少一个值转换为unsigned long long

long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];

例如,如果您使用 double 并看到相同的行为,则情况相同。

【讨论】:

  • 是的,明白了,谢谢..我只是想问一下你什么时候使用静态转换,什么时候像上面的评论一样将用于转换的类型放在括号中。两者有区别吗?
  • @ShivamSingh 在 cpp 中有几种类型的转换可以执行不同的操作。这个想法是你明确地说你想表演什么演员。仅使用括号进行转换称为 c 样式转换,并且可以执行所有转换。如果您正在编写高质量的 cpp 代码,则不应使用它。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2021-11-17
相关资源
最近更新 更多