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 using5、執行結果: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
}
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 ...