連續最大積

2021-07-09 05:07:44 字數 1626 閱讀 2785

問題描述:

小明和他的好朋友小西在玩乙個遊戲,由電腦隨機生成乙個由-2,0,2三個數組成的陣列,並且約定,誰先算出這個陣列中某一段連續元素的積的最大值,就算誰贏!

比如我們有如下隨機數組:

2 2 0 -2 0 2 2 -2 -2 0

在這個陣列的眾多連續子串行中,2 2 -2 -2這個連續子串行的積為最大。

現在小明請你幫忙算出這個最大值。

輸入:

第一行輸入乙個正整數t,表示總共有t組資料(t <= 200)。

接下來的t組資料,每組資料第一行輸入n,表示陣列的元素總個數(1<= n <= 10000)。

再接下來輸入n個由0,-2,2組成的元素,元素之間用空格分開。

輸出:

第一行輸入乙個正整數t,表示總共有t組資料(t <= 200)。

接下來的t組資料,每組資料第一行輸入n,表示陣列的元素總個數(1<= n <= 10000)。

再接下來輸入n個由0,-2,2組成的元素,元素之間用空格分開。

樣例輸入:

2

2 -2 0

10 2 2 0 -2 0 2 2 -2 -2 0

輸出:

case #1: 0

case #2: 4

建立乙個二維陣列儲存輸入的資料:

int t,n;

//定義乙個動態二維int陣列

int**arr;

//建立行指標

arr=new int

*[t];

//輸入資料

srand((int)time(null));

for(int i=0;i//為每一行分配空間

scanf("%d",&n);

arr[i]=new int[n+1];

arr[i][0]=n;

for(int j=1;j1;j++)

printf("\n");

}

輸出最大積:

for(int i=0;iint max_value=0;

for(int j=1;j<=arr[i][0]-1;j++)

}printf("\ncase #%d:%d",i+1,max_value);

}

怎樣生成隨機數 -2 0 2:

c語言生成的隨機數為無符號數,即都是正的。要想生成正負隨機的,可以先通過模除限定返回,再減去對應的範圍的中間值即可。

比如,要獲取-1000~+1000範圍的隨機數,總的數量為2001個,這樣就可以通過**rand()%2001 使得到的結果限制在0-2000範圍,再減去1000, 結果就是-1000~+1000之間了。寫成**就是rand()%2001 - 1000;

經典 最大和 最大積連續子串行問題

原文 對於乙個包含了正負整數的陣列,求其 最大和 連續子串行 以及 最大積 連續子串行 比如 3 4 8 5 2 6 7 最大和子串行是 8 5 2 6,和為11 最大積子串行是 3 4 8 5 2 6,積自己算 對於最大和問題 我們令f n 表示 0,n 區間內以d n 為結尾的最大和,d為原序列...

求子陣列的連續最大積 面試精選

這幾天看到這個問題,然後在網上沒能找到完整的答案,作者kay zhyu給出了不錯的思路,而且針對大部分測試時都能給出正確的答案,但是在正負小數比較多時,有些結果不對。其實質時,忽略了小數相乘時結果越來越小這個結論,當兩個小數相乘時,乘積肯定沒有當前這個數大,因而我們需要保留當前這個數作為最大的乘積。...

hdu 4561 模擬小題or連續最大積

description 小明和他的好朋友小西在玩乙個遊戲,由電腦隨機生成乙個由 2,0,2三個數組成的陣列,並且約定,誰先算出這個陣列中某一段連續元素的積的最大值,就算誰贏!比如我們有如下隨機數組 2 2 0 2 0 2 2 2 2 0 在這個陣列的眾多連續子串行中,2 2 2 2這個連續子串行的積...