新手 - C++的一道题目运行不过
黄舟
黄舟 2017-04-17 13:41:58
0
2
364

程序新手,正在做计蒜课“挑战难题”中的一道题:最大子阵列:
无奈代码在本地输入多组数据得到结果正常,但是就是通过不了...
希望各位大大能抽空看看我哪里错了,小白十分感谢 >_<

题目:

在一个数组中找出和最大的连续几个数。(至少包含一个数)

例如:

数组 A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列 [4,−1,2,1] 有最大的和 6.

输入格式
第一行输入一个不超过 1000 的整数 n。
第二行输入 n 个整数 A[i]。

输出格式
第一行输出一个整数,表示最大的和。

样例 1
输入:
3
1 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;
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
伊谢尔伦
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的错误发上来。
还有可以参考我的代码

巴扎黑

你好,你在定义数组的时候不能写成int A[n],因为编译器在编译的时候要为数组开辟确定的空间,你那个n是变量,只有运行的时候才能得到具体值,你在本地没错可能是你编译器的事,可能你用的是g++什么的吧,你用vs肯定报错,所以不能这样写的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板