gpt4 book ai didi

C++ vector 和记忆化运行时错误问题

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:19 25 4
gpt4 key购买 nike

我遇到了一个问题here在 Codechef。我正在尝试使用 vector 进行内存。由于我在编程方面还是个新手,对 STL 容器也很不熟悉,所以我使用了 vector 作为查找表。 (尽管有人建议我使用 map 有助于解决问题)。

所以,我的问题是下面给出的解决方案是如何遇到运行时错误的。为了得到错误,我使用问题的边界值 (100000000) 作为输入。我的 Netbeans IDE 显示的错误消息是 RUN FAILED(退出值 1,总时间:4s),输入为 1000000000。这是代码:

#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>

#define LCM 12
#define MAXSIZE 100000000
using namespace std;
/*
*
*/
vector<unsigned long> lookup(MAXSIZE,0);

int solve(int n)
{
if ( n < 12) {
return n;
}
else {
if (n < MAXSIZE) {
if (lookup[n] != 0) {
return lookup[n];
}
}

int temp = solve(n/2)+solve(n/3)+solve(n/4);
if (temp >= lookup[n] ) {
lookup[n] = temp;
}
return lookup[n];

}
}
int main(int argc, char** argv) {
int t;
cin>>t;
int n;
n = solve(t);
if ( t >= n) {
cout<<t<<endl;
}
else {
cout<<n<<endl;
}
return 0;
}

最佳答案

我怀疑这是否是内存问题,因为他已经说过该程序实际运行并且他输入了 100000000。

我注意到的一件事是,在 if 条件下,即使 n == MAXSIZE(在这个确切的条件下),您也在执行 lookup[n]。由于 C++ 使用 0 索引 vector ,因此这将超出 vector 末尾 1。

    if (n < MAXSIZE)  {
...
}

...
if (temp >= lookup[n] ) {
lookup[n] = temp;
}
return lookup[n];

我猜不出算法在做什么,但我认为第一个“if”的右大括号 } 应该放低一点,您可能会在这个边界条件下返回错误。

关于C++ vector 和记忆化运行时错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029899/

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