最大子陣列和02

2022-07-19 01:27:10 字數 2890 閱讀 5800

1、題目要求:

(1)輸入乙個整形陣列,陣列裡有正數也有負數;

(2)陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和;

(3)如果陣列a[0]……a[j-1]首位相鄰,允許a[i-1],……a[n-1],a[0]……a[i-1]之和最大;

(4)同時返回最大子陣列的位置。

2、實現思路:

(1)先要輸入一組整形數,直到輸入回車結束;

(2)分離出每乙個數,按順序存放到整形陣列裡;

(3)每乙個、相連續兩個、三個……都是子陣列,分別求出子陣列的和,把最大的和輸出。

(1)輸入陣列元素,用空格分開,輸入的是字元,轉化為整形數,連續的0~9字元,按所在數字進行放大求和,得出輸入的整形數;

(2)若輸入的字元是空格,則將空格前的數存放入整形陣列中;

(3)按回車,輸入結束,開始計算;

(4)計算過程:

把陣列複製一遍,按順序存放到原陣列的後面,生成乙個新的陣列,長度為原陣列的兩倍,前後兩部分相同;

以下加操作全部只迴圈n次,以免加到重複的數;

從第乙個數開始,依次比較大小,最大的數單獨存放在num1;

第乙個數,開始,求arr[1]+arr[2]+……+arr[n],將所有和的最大值與num1 比較,最大值存入num1;

再求arr[i]+arr[i+1]+……+arr[k],將所有和的最大值與num1 比較,最大值存入num1;

直到arr[i] 為最後乙個數為止,num1 即為子陣列最大的和。

4、源**:

#include using

namespace

std;

char arr[1000];//

接收資料,並以字串形式儲存

int arr1[100];//

儲存轉換來的整數

int arr2[200];//

儲存擴大兩倍後的陣列

int k=0;//

計數標誌

void chtoin()//

將字元形式的陣列轉為整型

else

//flag為1,說明讀入的數為負數

break

; }

else

else

}else

if (arr[i]=='

-')//

遇到-,判斷為負數,將flag置位1

else}}

}void arr1toarr2()//

陣列擴充套件函式,將陣列擴充套件到原來的兩倍

for (;i<2*k;i++)

}void

main()

if (j==k+x)

else

}i++;

}x++;

y2=0

;

if (num3<=num1)

else

if (x==k)

}cout

<

最大子陣列為:

"<

for (int h=y1;h)

cout

<

cout

<

最大子陣列和為:

"<

cout

}

5、執行結果:

6、總結分析:

在這次的題目中,我們並沒有費很多的時間,當老師提出這個問題的時候,我就想到了將原陣列長度增長一倍,並複製兩遍,進行計算

遇到的問題:開始沒有想到,要控制計算求和的長度,以至於把同乙個數計算了兩遍。。。。終於想到,陣列長度變了,但求和時長度要控制在原陣列的一倍長度以內。

專案計畫日誌(單位:h):

聽課編寫程式

閱讀相關書籍

網上查詢資料

日總計周一20

10.5

3.5周二01

0.50

1.5週三02

002周四

21.5

01.55周五

020.50

2.5週六03

003週日

周總計4

9.52

217.5

時間記錄日誌(單位:min):

日期開始時間

結束時間

中斷時間

淨時間活動

備註星期一

14:00

15:50

10(課間)

100聽課

軟體工程上課

19:30

21:30

3090

閱讀、上網查資料

星期二19:30

21:30

3090

程式設計、閱讀

星期三14:00

15:00060

程式設計陣列最大子陣列之和

19:00

20:30

30120

程式設計星期四

14:00

15:50

10(課間)

100聽課

軟體工程上課

16:20

17:30070

程式設計、上網查資料

陣列最大子陣列之和2的程式

19:30

21:00

3060

程式設計陣列最大子陣列之和2的程式

星期五14:00

17:00

60120

程式設計陣列最大子陣列之和2的程式

星期六8:00

11:30

30(洗漱)

180修改,除錯,發布

陣列最大子陣列之和程式進行修改、除錯、寫部落格並發布

最大子陣列和

問題描述 給定乙個整數陣列a 0 n 求陣列a的子陣列,使其元素和為最大。問題分析 方法一 可以用普通的方法列舉所有的子陣列,然後求出最大的子陣列和,時間複雜度為o n n 方法二 問題描述符合動態規劃最優子結構的要求。設b i 表示以a i 結尾的子陣列的最大子段和,即 b i max,其中0 j...

最大子陣列和

給定乙個陣列 求出陣列的最大子陣列和 其中包含正,負 和0 很簡單把每個子陣列的和求出來話不多說看 方法1暴力求解法 把所有的子陣列都求解出來o n2 public static intgetmaxsubarr int arr return res 第二種方法 dp求解 很簡單理解加上當前的數arr...

最大子陣列和

使用動態規劃 f i 以array i 為末尾元素的子陣列的和的最大值,子陣列的元素的相對位置不變 f i max f i 1 array i array i res 所有子陣列的和的最大值 res max res,f i 如陣列 6,3,2,7,15,1,2,2 初始狀態 f 0 6 res 6 ...