日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、題目及題目要求

題目:返回一個整數數組中最大子數組的和。
要求:
(1)輸入一個整形數組,數組里有正數也有負數。
(2)數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
(3)如果數組A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
(4)同時返回最大子數組的位置。

二、設計思路

這次的編程開發是基于上次的返回一個整數數組中最大子數組的和( http://www.cnblogs.com/a1397240667/p/5322471.html),我和我的搭檔開始了認真的討論,再結合課堂上的同學討論,如何能在一維數組原有的基礎上,加上首尾相連這個條件,最后得到的方法大概思想是:遍歷數組里面的每一個數將第一個數變為最后一個數,這樣又變成了一個新的一維數組,輸出每個數組的最大子數組和,然后比較每個輸出的和,找出最大的數。

三、代碼

1 /*2016.3.24 weilihua fengyutong*/ 2 #include <iostream> 3 #include<ctime> 4 #define Num 10000 5 using namespace std; 6 int DTGH_Sum(int a[],int n) //動態規劃法求子段和函數 7 { 8 int sum = 0; 9 int *b = (int *) malloc(n * sizeof(int)); //動態為數組分配空間 10 b[0] = a[0]; 11 for(int i = 1; i < n; i++) 12 { 13 if(b[i-1] > 0) 14 b[i] = b[i - 1] + a[i]; 15 else 16 b[i] = a[i]; 17 } 18 for(int j = 0; j < n; j++) 19 { 20 if(b[j] > sum) 21 sum = b[j]; 22 } 23 delete []b; //釋放內存 24 return sum; 25 } 26 int main() 27 { int temp,b; 28 int sum=0; 29 int i; 30 int a1,a2; 31 int a[Num]; 32 int length=0; 33 while (length==NULL||length == 0)//如果數組長度為空或零則請重新輸入 34 { 35 cout<<"請輸入數組長度:"; 36 cin>>length; 37 } 38 cout<<"生成隨機序列: "<<endl; 39 srand((unsigned)time(NULL)); 40 for(i=0;i<length;i++)//產生隨機序列 41 { 42 if(rand()%2==0) 43 { 44 a[i]=rand()%100; 45 } 46 else 47 { 48 a[i]=(-1)*rand()%100; 49 } 50 cout<<a[i]<<" "; 51 } 52 cout<<endl; 53 cout<<"此首尾相連的數組中最大子數組的和有以下幾種可能:"<<endl; 54 cout<<"第1種排列方式:"<<endl; 55 for( i=0;i<length;i++) 56 { 57 cout<<a[i]<<" "; 58 } 59 cout<<"最大子數組和為:"<<DTGH_Sum(a,length)<<endl; 60 a1=DTGH_Sum(a,length); 61 for(b=1;b<length;b++) 62 { 63 temp=a[0]; 64 for(i=1;i<=length;i++) 65 { 66 a[i-1]=a[i]; //將第一個數變為最后一個數 67 68 } 69 a[length-1]=temp; 70 cout<<""<<b+1<<"種排列方式:"<<endl; 71 for( i=0;i<length;i++) 72 { 73 cout<<a[i]<<" "; 74 } 75 cout<<"最大子數組和為:"<<DTGH_Sum(a,length)<<endl; 76 if(DTGH_Sum(a,length)>=sum) 77 { 78 sum=DTGH_Sum(a,length); 79 } 80 } 81 a2=sum; 82 cout<<endl; 83 if(a1>=a2) 84 { 85 cout<<"綜上,最大的子數組和為:"<<a1<<endl; 86 } 87 else 88 { 89 cout<<"綜上,最大的子數組和為:"<<a2<<endl; 90 } 91 return 0; 92 }

四、運行截圖

當數組長度為1000時:

五、項目計劃日志

?

日期&&任務

聽課編寫程序閱讀相關書籍網上查找資料? 日總計
周一100?3030160
周二?1203030180
周三?30301070
周四10020?30?150
周五?120??3030180
周六?45301085
周日??200?3010??240
周總計200535180110

1065

?

時間記錄日志

3/21

日期開始時間結束時間中斷時間凈時間活動備注
3/2114:0015:5010100聽課軟件工程上課
?21:0421:? 34030閱讀書籍《構建之法》
?22:1022: 400?30網上查找資料?
?3/22?18:00?18:30?0?30?閱讀書籍《構建之法》?
?19:0021:3020120編寫程序結對開發- 子數組之和
?22:??1522:? 450?30網上查找資料?
3/2319:? 2520: 00530編寫程序結對開發- 子數組之和
?22:0022: 30030閱讀書籍《構建之法》
?22:4022: 50010查找資料?
3/2414:0015:? 5010100上課軟件工程上課
?18:2618: 504?20編寫程序結對開發- 子數組之和
??22:00?22:30?0?30?閱讀書籍?《構建之法》
3/2514:? 0016:??2020120?編寫程序結對開發- 子數組之和
?11:2312: 00730網上查找資料?
??21:00?21:30?0?30?閱讀書籍?《構建之法》
3/267: 00? 7: 30030閱讀書籍閱讀《構建之法》
?10: 0011: 001545編寫程序結對開發- 子數組之和
?9:? 45? 9: 55?010網上查找資料?
3/278:2012:0020200編寫程序結對開發- 子數組之和
?21:0021:10010網上查找資料?
?21:3022:00030閱讀書籍《構建之法》

?

缺陷記錄日志

?

日期編號類型引入階段排除階段修復時間備注
3/24120編碼編譯4實參與形參類型對應問題
3/24220編碼編譯1申請了動態空間未釋放
3/253?20?編碼?編譯?7當數組長度為0時,無法正常跳出
3/27420編碼編譯20邏輯有問題,會突然中止
3/27520編碼編譯1變量未初始化



?

同組伙伴博客:http://www.cnblogs.com/qizhonh/

工作照:

?

轉載于:https://www.cnblogs.com/a1397240667/p/5323248.html

總結

以上是生活随笔為你收集整理的结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。