结对开发四
一、題目要求
題目:返回一個整數數組中最大子數組的和。 要求: 輸入一個整形數組,數組里有正數也有負數。 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。 如 果數組A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。 同時返回最大子數組的位置。 求所有子數組的和的最大值。要求時間復雜度為O(n)。?
二、設計思路
? 這次的設計思路還是沿用第一次的一位數組的算法尋找最大值,不過這次的主要問題在于這次的一位數組要首尾相連,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大,所以我們采用以下方法尋找最大值
? 如輸入 a1 a2 a3 a4這4位數,我們將其擴展為
??????????? a1 a2 a3 a4 a1 a2 a3
然后調用函數找出最大子數組的和(這里利用的方法和第一次一維數組的方法相同),并返回這個最大子數組
?
三、源程序
?
1 //結對人員:蓋相庚 曹美娜 2 //開發時間:2015/3/27 3 4 #include "stdio.h" 5 #include"stdlib.h" 6 #include"time.h" 7 #define N 1000 8 int compare( int arry[],int length) 9 { 10 int max[N],max1; 11 int maxlocat[N]; 12 for(int j=0;j<(length+1)/2;j++) 13 { 14 int sum=0; 15 max1=-9999999; 16 int z=0; 17 for(int i=j;i<(length+1)/2+j;i++) 18 { 19 sum=sum+arry[i]; 20 if(sum>=max1) 21 { 22 max1=sum; 23 z++; 24 } 25 } 26 max[j]=max1; 27 maxlocat[j]=z; 28 // printf("包含數組中第%d個數的所有子數組中和最大的值為:%d\n",j+1,max[j]); 29 } 30 int fmax=max[0]; 31 int q=0; 32 for(int i=0;i<(length+1/2);i++) 33 { 34 if(max[i]>fmax) 35 { 36 fmax=max[i]; 37 q++; 38 } 39 } 40 41 int locat=maxlocat[q]; 42 43 printf("最大子數組為:\n"); 44 for(int num=q;num<q+locat;num++) 45 { 46 printf("%d ",arry[num]); 47 } 48 49 printf("其和為:%d\n",fmax); 50 return 0; 51 } 52 53 int main(int argc, char* argv[]) 54 { 55 int arry[N]; 56 int length; 57 58 printf("請輸入要比較整數的個數:"); 59 scanf("%d",&length); 60 printf("請輸入整數\n"); 61 for(int i=0;i<length;i++) 62 { 63 scanf("%d",&arry[i]); 64 } 65 66 int num=0; 67 for(int j=length;j<2*length-1;j++) //將輸入的這幾個數再向后拓展 68 { 69 arry[j]=arry[num]; 70 num++; 71 } 72 73 printf("$由這幾個數形成的環形數組\n"); 74 compare(arry,2*length-1); 75 return 0; 76 }?
四、截圖
發現輸出結果錯誤
后經調試發現
改正為
改正后的輸出結果為
五、結對心得
? 此次的結對練習我覺得蓋相庚同學才是真正的主力,因為設計思路是他的想法,我只是順著他的思路理清,思路理清后,又因為有先前的程序做基礎,所以代碼很容易就完成了,我覺得蓋蓋同學沒有自信,他明明能做的很好的,比如這次,希望蓋蓋以后加強信心,好好加油,蓋蓋同學棒棒噠!!!
六、工作照
好吧照片還是上一次的,是因為我把新拍的給整丟了,老師你可別怪我啊
?
轉載于:https://www.cnblogs.com/caomeina/p/4372306.html
總結
- 上一篇: LOLs11时光老头出装 时光守护者出装
- 下一篇: JDK安装和JAVA_HOME配置