问题描述
程序新手,正在做计蒜课“挑战难题”中的一道题:最大子阵列:无奈代码在本地输入多组数据得到结果正常,但是就是通过不了...希望各位大大能抽空看看我哪里错了,小白十分感谢 >_<
题目:
在一个数组中找出和最大的连续几个数。(至少包含一个数)
例如:
数组 A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列 [4,−1,2,1] 有最大的和 6.
输入格式第一行输入一个不超过 1000 的整数 n。第二行输入 n 个整数 A[i]。
输出格式第一行输出一个整数,表示最大的和。
样例 1输入:31 1 -2输出:2
我的代码:
#include <cstdio>#include <iostream>using namespace std;int AMax(int a[], int N){ int m = 0; int sum[N+1][N+1];for (int p = 0; p <= N; ++p) //初始化单个元素 {sum[p][p] = a[p]; } for (int i = 0; i < N; ++i) //求和 {for (int j = i; j < N; ++j){ sum[i][j+1] = sum[i][j] + a[j+1];} }for (int i = 0; i <= N; ++i) //比较 {for (int j = i; j <= N; ++j){ if (sum[i][j] > m)m = sum[i][j];} } return m;}int main(){ int n; cin >> n; int A[n]; for (int i = 0; i != n; ++i)cin >> A[i];cout << AMax(A, n-1); return 0;}
问题解答
回答1:int main(){ int n; cin >> n; int A[n]; for (int i = 0; i != n; ++i)cin >> A[i]; //就算支持 VLA,然而这个循环已经越界了cout << AMax(A, n-1); return 0;}
如果你更改了代码,请把你的最新代码上传以及NA的错误发上来。还有可以参考我的代码
回答2:你好,你在定义数组的时候不能写成int A[n],因为编译器在编译的时候要为数组开辟确定的空间,你那个n是变量,只有运行的时候才能得到具体值,你在本地没错可能是你编译器的事,可能你用的是g++什么的吧,你用vs肯定报错,所以不能这样写的

