结对开发项目:求整数数组中连续子数组和的最大值
小組成員:安娜 王鑫楠
題目二:求整數(shù)數(shù)組中連續(xù)子數(shù)組和的最大值。
1、分析過程:
題目收到后,前五分鐘設(shè)計(jì)算法,首先也想到是不是一次遍歷可以解決,考慮了一下覺得難度有點(diǎn)大最后還是果斷放棄。我剛開始的以思路是以子數(shù)組的長度作為第一層循環(huán)條件,即以2長度為例:比較a[0]+a[1],a[1]+a[2],......a[N-2]+a[N-1]的大小。安娜的思路是以數(shù)組的順序?yàn)榈谝粚友h(huán)條件,即以a[0]為例:分別比較a[0],a[0]+a[1],a[0]+a[1]+a[2],.....a[0]+...a[N-1]大小。最后我們選擇了安娜的想法。
2、代碼編寫過程
前20分鐘安娜“駕駛”,我來“導(dǎo)航”,然后交換角色。
代碼如下:
1 #include<stdio.h> 2 #define N 5 3 4 void sumarray(int a[]) 5 { 6 int i,j; 7 int locl=0,loch=0; 8 int maxsum=a[0]; 9 int sum; 10 for(i=0;i<N;i++) 11 { 12 // sum=a[i]; 13 for(j=i;j<N;j++) 14 { 15 if(i==j) 16 { 17 sum=a[i]; 18 } 19 else 20 { 21 sum=sum+a[j]; 22 } 23 if(maxsum<sum) 24 { 25 maxsum=sum; 26 locl=i; 27 loch=j; 28 } 29 //sum=sum+a[j+1]; 30 } 31 } 32 printf("最大值:%d\n",maxsum); 33 34 printf("子數(shù)組下標(biāo):%d %d\n",locl,loch); 35 } 36 void main() 37 { 38 int a[N]={1,2,3,4,5}; 39 sumarray(a); 40 }運(yùn)行結(jié)果:
3、測試過程:
(1)第一次運(yùn)行發(fā)現(xiàn)和過于大,發(fā)現(xiàn)是大意的錯誤,將sum=sum+a[i]寫成sum+=sum+a[i]。
(2)用int?a[N]={-2,-3,-4,-5,-2};測試,結(jié)果為:
?
?發(fā)現(xiàn)是?locl,loch未賦初值。修改為int?locl=0,loch=0。
(3)a[j+1處會數(shù)組溢出,雖然不影響測驗(yàn)結(jié)果的正確性(vc++6.0的環(huán)境下對溢出的數(shù)組成員有賦初值),但是換個運(yùn)行環(huán)境可能就會出錯,最后加了個if else語句將a[j+1]用
a[j]代替。
for(i=0;i<N;i++){sum=a[i];for(j=i;j<N;j++){if(maxsum<sum){ maxsum=sum;locl=i;loch=j;}sum=sum+a[j+1]; }}?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangxinnan/p/3592174.html
總結(jié)
以上是生活随笔為你收集整理的结对开发项目:求整数数组中连续子数组和的最大值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVVM模式的3种command总结[2
- 下一篇: oracle数据库元数据SQL查询