今天上软件工程的时候我们进行了一项结对项目,目的是寻找出一个数组中子数组和的最大值!
核心算法思想:既然是寻找子数组和的最大值,那就要明确一下子数组,子数组必须是数相邻!先确定该数组有多少数,根据用户的要求,当用户输入数组有多少数时,这时将这个数存到n中,然后数组就行为了a[n],然后将a[0]的值赋给sum和max,sum代表的是和,max代表的最大值。根据for循环,从第一个数开始进行sum求和,然后将得到的值与max比较,如果sum大于max的话,就将sum的值赋给max(如果sum小于max,就不进行操作),然后继续循环,直到循环结束,最后得到的max的值就是所有子数组和的最大值!
小组成员:刘三龙 严晓雄
我们很快就确定了自己的想法,然后进入了编程,很快就得到了整个源代码,并且进行了各种测试,这些都是我们在课堂上就完成了的!在下面我们会把我们的讨论草图,用例,还有源代码放在下面!
源代码如下:
1 #include "stdafx.h" 2 3 void sort(int n,int a[]) 4 { 5 int N; 6 int i=0; 7 int j=0; 8 int sum=0; //数组中元素进行求和 9 int max; //数组中子数组的最大值 10 int b[100]; 11 N=n; 12 for(i=0;i<N;i++) 13 b[i]=a[i]; 14 if(N==0) 15 { 16 printf("输入错误!\n"); 17 } 18 else 19 { 20 printf("请输入需要输入的数:"); 21 for(i=0;i<N;i++) 22 scanf("%d",&b[i]); 23 max=b[0]; 24 for(i=0;i<N;i++) //先从第一个数开始循环到最后一个数,然后再从第二个开始到最后一个,直到最后一个自己 25 { 26 sum=b[i]; 27 for(j=i+1;j<n;j++) 28 { 29 sum=sum+b[j]; 30 if(sum>max) //如果sum>max,就将sum的值赋给max 31 { 32 max=sum; 33 } 34 } 35 } 36 printf("最大的子数组之和为:%d\n",max); 37 } 38 } 39 40 int main(int argc, char* argv[]) 41 { 42 int i=0; 43 int n; 44 int j=0; 45 int max=0; 46 int sum=0; 47 int a[100]; 48 printf("需要输出几个数:"); 49 scanf("%d",&n); 50 sort(n,a); 51 return 0; 52 }