课堂练习三
Posted lbq-0412
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课堂练习三相关的知识,希望对你有一定的参考价值。
题目:返回一个整数数组中最大子数组的和。
要求:
1)输入一个整形数组,数组里有正数也有负数。
2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
设计思想:这是第三次的课堂练习,相比较上一次的多了第三条,数组收尾相连,即把数组变成了环状的,就像上学期数据结构的循环列表,从环状的任意位置剪开,就出现每次遍历时首元素和尾元素不一样,从而求出的最大组数组的和也不一样,因此需要进一步比较各个数组,即把每一种起点不同的情况下的最大子数组求出并保存,然后再比较,这里就存在了多重比较。
#include<iostream>
#include<time.h>
#define n 10
using namespace std;
void main()
{
int a[n],c,d,w=0,b[n][n],p1=0,p2=0,t,m;
srand((int)time(0));
for(c=0;c<n;c++)
{
a[c]=-rand()%36+25;
}
for(c=0;c<n;c++)
{
cout<<a[c]<<endl;
}
for(c=0;c<n;c++)
{
m=c;
w=0;
d=0;
while(d<=n-1)
{
w+=a[m];
b[c][d]=w;
m++;
if(m>n-1)
{
m=0;
}
d++;
}
}
t=b[0][0];
for(c=0;c<n;c++)
{
for(d=0;d<n;d++)
{
if(b[c][d]>t)
{
t=b[c][d];
p1=c;
p2=d;
}
}
}
cout<<"最大子数组的值为:"<<t<<endl;
cout<<"子数组中元素的下标为:"<<endl;
c=0;
while(c<=p2)
{
cout<<p1<<" ";
p1++;
if(p1>=n)
{
p1=0;
}
c++;
}
cout<<endl;
}
#include<time.h>
#define n 10
using namespace std;
void main()
{
int a[n],c,d,w=0,b[n][n],p1=0,p2=0,t,m;
srand((int)time(0));
for(c=0;c<n;c++)
{
a[c]=-rand()%36+25;
}
for(c=0;c<n;c++)
{
cout<<a[c]<<endl;
}
for(c=0;c<n;c++)
{
m=c;
w=0;
d=0;
while(d<=n-1)
{
w+=a[m];
b[c][d]=w;
m++;
if(m>n-1)
{
m=0;
}
d++;
}
}
t=b[0][0];
for(c=0;c<n;c++)
{
for(d=0;d<n;d++)
{
if(b[c][d]>t)
{
t=b[c][d];
p1=c;
p2=d;
}
}
}
cout<<"最大子数组的值为:"<<t<<endl;
cout<<"子数组中元素的下标为:"<<endl;
c=0;
while(c<=p2)
{
cout<<p1<<" ";
p1++;
if(p1>=n)
{
p1=0;
}
c++;
}
cout<<endl;
}
以上是关于课堂练习三的主要内容,如果未能解决你的问题,请参考以下文章