个人项目3
1.要求:
(1)实现在线答题
(2)答题结束后,可以判断对错
(3)并将错题的结果保存起来
2.设计思想 :
通过更改数组的长度将数组拟合成一个循环数组,将普通的一维数组A[n]的前n-1位数组数加到数组A[n]后面组成一个新的数组A[2n-1],再进行普通的一维数组的计算
3、源程序
#inc,lude <iostream>
using namespace std;
#define N 1000
int main(int argc, char* argv[])
{
int arry[N];
int length=1;
int max[N],max1; //max[N]存每一次求和的结果,在其中找最大值,为所求
int maxweizhi[N];
int num=0;
int value( int arry[],int length);
cout<<"请输入数组:"<<endl;
cin >> arry[0];
while (getchar() != '\n') //输入数组
{
cin >> arry[length];
length++;
}
for(int j=length;j<2*length-1;j++) //形成环形数组,首位相连
{
arry[j]=arry[num];
num++;
}
cout<<"由这几个数形成的环形数组";
value(arry,2*length-1);
return 0;
}
int value( int arry[],int length)
{
int max[N],max1;
int maxweizhi[N];
for(int j=0;j<(length+1)/2;j++)
{
int sum=0;
max1=-9999999; //设置最低范围
int z=0;
for(int i=j;i<(length+1)/2+j;i++) //环形数组找最大子数组和
{
sum=sum+arry[i];
if(sum>=max1)
{
max1=sum;
z++;
}
}
max[j]=max1;
maxweizhi[j]=z;
}
int fmax=max[0];
int q=0;
for(int i=0;i<(length+1/2);i++) //在所有和的数组中找最大值
{
if(max[i]>fmax)
{
fmax=max[i];
q=i;
}
}
int weizhi=maxweizhi[q];
cout<<"最大子数组为:"<<endl;
for(int num=q;num<q+weizhi;num++) //输出最大子数组的位置
{
cout<<arry[num];
}
cout<<"其和为: "<<fmax<<endl;
return 0;
}
4.运行结果截图:
posted on 2018-11-01 16:08 🌚🌚🌚🌝🌝 阅读(99) 评论(0) 编辑 收藏 举报