※ 引述《changyuheng (張昱珩)》之銘言:
: 加碼一題:
: 給任一有限長度整數數列,
: 求以特定方法取出其中數字加總所能獲得的極大值。
: 取法條件限制:
: 最多連續取 2 個數,亦即不得連續取 3 個數。
: 例:
: 2, 1, 9, 5, 2, 0, 1, 3, 4
: 可以下列方法取出數字:
: 1) 2, 1, 5, 2, 1, 3
: 2) 2, 1, 2, 0, 4
: 不可以下列方法取出數字:
: 1) 2, 1, 9, 2, 0, 3, 4
看不太出來這題是要考什麼 @@
好像就直接算而已。
// 喝完一瓶紅酒剛睡醒頭有點痛的爛 code
// c style, 可能不能跑...XD
int[] arr = {/* 管它是什麼 */};
int[] pos = {0, 0}, mpos = {0, 0};
int i, j, max, curr;
// 需要的話這裡先判斷 arr 是不是空的
max = arr[0];
for (i = 0; i < arr.length; i++) {
curr = arr[i]; // 直接改掉 curr 跟 pos
pos[0] = pos[1] = i;
if (curr > 0) { // 目前數為正才考慮要不要加上下一個
j = i+1;
if (j < arr.length // 後一個不為正就忽略
&& arr[j] > 0) // 不然就給它加下去
curr += arr[j];
pos[1] = j;
}
}
if (curr > max) { // 比大小, 更新
mpos[0] = pos[0];
mpos[1] = pos[1];
max = curr;
}
}