返回一个整数数组中最大子数组的和(循环)。

要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1]…… A[n-1]A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。

思路:在上次实验的基础上,将第一个数移动到最后,寻找最大子数组,循环此过程,比较所有的最大子数组,找到最终结果。

成员分工:代码编写:张航    代码测试:何自强

#include<iostream>
using namespace std;
void main()
{
    int a[n], b[n][n];
    int length, i, j, w = 0, p = 0, q = 0, temp, m;
    cout<< "请输入数组" << endl;
    for (length = 0;;)
    {
        cin >> a[length];
        length++;
        if (getchar() == '\n')
        {
            break;
        }
    }
    cout << "这个数组的长度为:" << length << endl;
    for (i = 0; i<length; i++)
    {
        m = i;
        w = 0;
        j = 0;
        while (j <= length - 1)
        {
            w += a[m];
            b[i][j] = w;
            m++;
            if (m>length - 1)
            {
                m = 0;
            }
            j++;
        }
    }
 
    temp = b[0][0];
    for (i = 0; i<length; i++)
    {
        for (j = 0; j<length; j++)
        {
            if (b[i][j]>temp)
            {
                temp = b[i][j];
                p = i;
                q = j;
            }
        }
    }
 
    cout << "最大子数组的值为:" << temp << endl;
    cout << "最大子数组的位置6:" << endl;
    i = 0;
    while (i <= q)
    {
        cout << p << "  ";
        p++;
        if (p >= length)
        {
            p = 0;
        }
        i++;
    }
 
    cout << endl;
}

成果截图

成员照片

猜你喜欢

转载自www.cnblogs.com/hzqsyr/p/9904145.html