应王老师要求,返回子数组的作业又来啦!这次的数组是首尾相连的
预计时间:两小时
实际时间:周四上课15分钟+周日13:20-14:30
先说一下我的想法,之前的作业都是可以直接遍历整个数组,因为数组的长度是一定的,循环结束后就可以获得到所有子数组。但是这次作业的前提是数组首尾相连,遍历整个数组是无法结束的。所以我可以先想象环状的数组断开,利用二维数组把断开数组的每个数被包含的子数组再次存放,再去遍历求子数组的和,那么接下来的程序就和之前的一样了。
程序:
#include<iostream>
#define n 100
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() == ' ')
{
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;
#define n 100
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() == ' ')
{
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 << endl;
}