课堂练习&课下作业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;
}

四、结果截图

五、老师要求的二人合照

六、总结

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

 

posted on 2018-10-14 15:36  宫兴成  阅读(124)  评论(0)    收藏  举报

导航