【问题标题】:Same test cases showing different answer相同的测试用例显示不同的答案
【发布时间】:2021-11-14 20:09:45
【问题描述】:

我对@9​​87654321@有疑问:

我的代码:

void miniMaxSum(vector<int> arr) {
    
sort(arr.begin(), arr.end()); 
int sum=0;
for(int i=0; i<5; i++)
sum += arr[i];
cout<<sum-arr[4]<<" "<<sum-arr[0]<<endl;   

}

换句话说:

void miniMaxSum(vector<int> arr) {
    
sort(arr.begin(), arr.end()); 

int min=0;
for(int i=0; i<4; i++)
min += arr[i];
cout<<min<<" ";

int max=0;
for(int i=1; i<5; i++)
max += arr[i];
cout<<max<<endl;
    
}

这些代码对于示例数据 1 和 2 运行成功,但是当我提交代码时,这些测试用例也显示为错误输出。

你能提示一下这段代码哪里错了吗?

【问题讨论】:

    标签: c++ arrays vector max min


    【解决方案1】:

    根据给定的问题将int更改为long long

    【讨论】:

      【解决方案2】:

      int 是一个 32 位整数,问题提到答案可能大于此。您需要为向量和最大变量使用 64 位整数 (int64_t)。

      您还应该切换到按引用而不是按值传递 void miniMaxSum(vector&lt;int&gt; arr) { 将复制整个数组,void miniMaxSum(const vector&lt;int&gt;&amp; arr) { 将传入对数组的只读引用而不复制它。

      【讨论】:

      • 函数通过排序来改变向量。只是让参数列表让你复制是最简单的,而 const ref 根本不起作用......
      猜你喜欢
      • 2022-11-29
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多