gpt4 book ai didi

c++ - 我必须从5的数组中找到4个数字的最大和。我的代码对于更大的数字失败

转载 作者:行者123 更新时间:2023-12-01 15:06:42 25 4
gpt4 key购买 nike

我必须以相同的方式从5个数组中找到4个数字的最大和。由于某些原因,maxsum变为负数,因此我的代码因某些较大的测试用例而失败

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int minimini(int list[]){
int minisum=0;
int taker;
int a=max({list[0],list[1],list[2],list[3],list[4]});
for (int i=0; i<5; i++){
taker=list[i];
if(taker!=a){
minisum=minisum+taker;
}
}
return minisum;
}
int maxa(int list[]){
int maxsum=0;
int taker;
int a=min({list[0],list[1],list[2],list[3],list[4]});
for (int i=0; i<5; i++){
taker=list[i];
if(taker!=a){
maxsum=maxsum+taker;
cout<<"maxsum >>"<<maxsum;
cout<<"a="<<a;
}
}
return maxsum;
}
int main(){
int list[5];
int minisum, maxsum;
for (int i=0; i<5; i++){
cin>>list[i];
}

minisum=minimini(list);
maxsum=maxa(list);

cout<<minisum<<" "<<maxsum;


return 0;
}

最佳答案

您的代码患有Integer Overflow。大多数现代计算机中的整数范围从-2,147,483,6482,147,483,647。既然您在注释中提到输入的范围可以从1到10 ^ 9,并且数组的大小为5,则最大和可以为5 * 10^9,实际上大于2,147,483,647。您只需要一个可以容纳更大值的数据类型,请使用:

  • long long
  • std::int64_t

  • 请注意,即使 unsigned int也不会执行此操作,因为它是 4,294,967,295 < 5 * 10^9。另一件事是

    A. int a = 2,147,483,647 ; int b = 2,147,483,647 ; long long k = a + b现在,由于 ab是整数,因此在将其分配回 long long之前会发生溢出,因为会发生整数加法又称为 32 bit加法。

    B. long long a = 2,147,483,647; long long b = 2,147,483,647; long long k = a + b。现在,不会发生溢出,因为将在 long long上执行加法,因为a和b是 long long,并且 64 bit会进行加法

    代码如下所示:
    long long list[5]; //See int is now long long
    long long minisum, maxsum;

    for (int i=0; i<5; i++) //i can be int because it's size of list i.e 5
    {
    cin>>list[i];
    }

    minisum=minimini(list);
    maxsum=maxa(list);

    cout<<minisum<<" "<<maxsum;

    关于c++ - 我必须从5的数组中找到4个数字的最大和。我的代码对于更大的数字失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59640434/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com