我在 XP 虚拟机中的 MingW 编译器上运行 CodeBlocks。我写了一些简单的代码,可在cl1p访问,它回答了CodeChef的算法问题(好吧,它只回答了部分问题,因为我还没有包含多个测试用例的循环。
但是,我的问题是,在调试模式下运行它时,它会为输入提供正确的输出 5:
3
1
2 1
1 2 3
但是,当我构建并运行它时,它给出了荒谬的巨大输出 131078,这对我来说似乎是垃圾。我不明白这是怎么回事,但我猜这与动态内存分配有关。这里有什么问题,我该如何解决?我什至通过BotSkool的在线编译器运行它,它运行良好。为测试用例添加循环后,代码甚至在 CodeChef 上也能正常工作!
#include <iostream>
using namespace std;
int main()
{
// Take In number of rows
int numofrows;
cin >> numofrows;
// Input Only item in first row
int * prevrow;
prevrow = new int[1];
cin >> prevrow[0];
// For every other row
for (int currownum = 1; currownum < numofrows; currownum++)
{
// Declare an array for that row's max values
int * currow;
currow = new int[currownum+1];
int curnum;
cin >> curnum;
// If its the first element, max is prevmax + current input
currow[0] = prevrow[0] + curnum;
// for every element
int i = 1;
for (; i <= currownum; i++)
{
cin >> curnum;
// if its not the first element, check whether prevmax or prev-1max is greater. Add to current input
int max = (prevrow[i] > prevrow[i-1]) ? prevrow[i] : prevrow[i-1];
// save as currmax.
currow[i] = max + curnum;
}
// save entire array in prev
prevrow = new int[i+1];
prevrow = currow;
}
// get highest element of array
int ans = 0;
for (int j=0; j<numofrows; j++)
{
if (prevrow[j] > ans)
{
ans = prevrow[j];
}
}
cout << ans;
}