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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

软件工程概论课堂作业3

發(fā)布時間:2023/11/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件工程概论课堂作业3 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:返回一個整數(shù)數(shù)組中最大子數(shù)組的和

要求:

輸入一個一維整形數(shù)組,數(shù)組里有正數(shù)也有負數(shù)。

一維數(shù)組首尾相接,象個一條首尾相接帶子一樣。

數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。

求所有子數(shù)組的和的最大值。

?

設計思想

用戶自定義數(shù)組長度并依次輸入數(shù)組元素,設一個全局變量初始化為零的數(shù)組a[N],N=10000;

1.因為該數(shù)組首尾相接可視作一個環(huán),那么我們需要在一個合適的位置斷開,把數(shù)組元素展成一條筆直的帶子。

(1).設用戶自定義數(shù)組長度為m,輸入數(shù)組各元素值a[1]~a[m],在for循環(huán)中加入代碼a[m+i]=a[i];(即復制輸入的數(shù)組接在該數(shù)組最后一個數(shù)后面,其中i為循環(huán)變量)

例:若輸入的數(shù)組為 1,-2,3,-4,5 ? 那么實際生成的數(shù)組為1,-2,3,-4,5,1,-2,3,-4,5

(2).找出合適的位置斷開,這個合適的位置即整個數(shù)組的最小值處,寫一個函數(shù)找出輸入的數(shù)組的最小值使該數(shù)排在第一位。

例:輸入數(shù)組為?1,-2,3,-4,5 ? 那么找出最小元素-4的位置并使其在第一位,所以實際生成并計算的數(shù)組為(下劃線部分):1,-2,3,-4,5,1,-2,3,-4,5

2.在合適位置斷開確定好數(shù)組后,根據(jù)第一次課堂作業(yè)(不考慮首尾相接的情況)計算

(1).從數(shù)組第一個不為零的元素累加,設累加值為S,為判斷數(shù)組第一個不為負的元素,S需要初始化為零;

(2).定義另一個整形變量sum存儲當前最大累加值S,sum需與累加值比較,所以sum應初始化為零 ?(1)每一次累加獲得一個S后判斷,若S為負,舍去使累加值為負的數(shù)組元素,繼續(xù)從下一個數(shù)組元素開始累加(2)若sum<S,把S賦值給sum,S繼續(xù)累加(3)如此循環(huán)直到數(shù)組元素取盡。

(3).最后輸出的sum為子數(shù)組最大值。

?

出現(xiàn)的問題

第一次編碼找出的所謂“合適”位置是累加到某個數(shù)使得累加值為負的那個元素,另其在第一位。

但是如果沒有某個值累加使得累加值小于零,那么結(jié)果出錯。

例:1,2,-2,4,5 ? 累加到-2使得前面三個元素的累加值為1不為零,所以計算得出的結(jié)果為9,而應該得出的結(jié)果為12

?

程序源代碼

?

//Jiang LingJun, 2016,04,11 //數(shù)組中有正有負,求最大子數(shù)組問題(數(shù)組首尾相接) #include<iostream> using namespace std; int a[10000];//全局變量(初始化數(shù)組a所有元素為零)int Find(int m,int a[])//找出輸入數(shù)組中最小值的下標位置c并返回 {int min,c=0,i;//c初始化為零是因為如果輸入數(shù)組的第一個元素為最小值,將報錯c未初始化min=a[0];for(i=0;i<m;i++){if(a[i]<min){min=a[i];c=i;}}return c; } int Sum(int m,int a[])//以數(shù)組中下標為c的元素為首接成環(huán),求出最大子數(shù)組的值sum {int i;int s=0;int sum=0;for(i=Find(m,a);i<m+Find(m,a);i++){if(s<0)s=a[i];//舍去使子數(shù)組和小于零的數(shù)組元素elses=s+a[i];//臨時存放數(shù)組元素的累加值if(sum<s)sum=s;//存放當前最大子數(shù)組的和 }return sum; } void InputAndDisplay()//輸入數(shù)組元素并輸出子數(shù)組的最大值(首尾相接成環(huán)的數(shù)組) {int i,m;cout<<"請輸入數(shù)組長度:\n";//自定義數(shù)組長度cin>>m;for(i=0;i<m;i++){cout<<"請輸入第"<<i+1<<"個數(shù):";cin>>a[i];a[i+m]=a[i];//復制輸入的數(shù)組接在該數(shù)組最后一個數(shù)后面 }cout<<"\n該數(shù)組首尾相接后子數(shù)組和的最大值為:"<<Sum(m,a)<<"\n"; }void main() {InputAndDisplay(); }

運行結(jié)果截圖


總結(jié)
拿到一個問題不要著急寫代碼,仔細思考解決方法并實現(xiàn);設計思想遠比代碼重要,一定要清晰準確,并按照設計思路逐步完成局部功能,然后實現(xiàn)總的需求。

?

轉(zhuǎn)載于:https://www.cnblogs.com/jianglingjun/p/5392907.html

總結(jié)

以上是生活随笔為你收集整理的软件工程概论课堂作业3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。