课堂练习&课下作业2报告
一、题目:返回一个整数数组中最大子数组的和。
要求:
1.要求程序必须能处理1000 个元素;
2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;
3. 输入一个整形数组,数组里有正数也有负数。
4. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
二、设计思想:
从第一个数开始,判断其正负,如果是正数,判断下一项的正负,正的相加,负的相加后判断和的正负,如果和是正的继续重复上述步骤,如果和是负的从下一个数重新开始计算,重复上述步骤直至数组结束。
三、源代码
#include<stdio.h>
#define N 1000
#define INF 10000
int maxsubsum(int *arr,int Size)
{
int sum=0;
int maxSum=-INF;
for(int i=0;i<Size;i++)
{
if(sum<0)
{
sum=arr[i];
}
else
{
sum+=arr[i];
}
if(maxSum<sum)
{
maxSum=sum;
}
}
return maxSum;
}
int main()
{
int MSS;
int i;
int j=0;//计数器
int arr[N]={0};
char c;//用来判断终止输入
printf("Please input N nunmbers:\n");
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
scanf("%c",&c);
j++;
if(c=='\n')
{
break;
}
}
printf("\n");
MSS=maxsubsum(arr,j);
printf("最大子数组和=%d\n",MSS);
return 0;
}
四、结果截图



五、老师要求的二人合照

六、总结
本次实验由于是基于上个实验的基础上完成的,速度较快,效率较高,二人合作大大保证了试验完成的质量,编译过程当中错误很少,可谓一气呵成,很是开心!



浙公网安备 33010602011771号