帶你粗略了解c++的最大乘積_第1頁
帶你粗略了解c++的最大乘積_第2頁
帶你粗略了解c++的最大乘積_第3頁
帶你粗略了解c++的最大乘積_第4頁
帶你粗略了解c++的最大乘積_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第帶你粗略了解c++的最大乘積目錄今天給大家講最大乘積這道題目樣例

思路代碼總結

今天給大家講最大乘積這道題目

最大乘積

內存限制:256MiB

時間限制:1000ms

輸入文件:maximum.in

輸出文件:maximum.out

題目類型:傳統

評測方式:文本比較

題目描述

給你nnn個整數a1,a2,a3,a4...ana1,a2,a3,a4...ana1,a2,a3,a4...an從中任意挑選出個數字,使得乘積最大,輸出乘積最大值。

輸入格式

輸入有多組測試數據。

第一行為整數ttt,表示測試數據組數。

每組測試數據第一行為整數nnn,表示數字的數量。

每組測試數據第二行有nnn個整數a1,a2,....ana1,a2,....ana1,a2,....an

輸出格式

每組測試數據輸出只有個整數,表示挑選出個數字的乘積最大值。

樣例

樣例輸入

4

5

-1-2-3-4-5

6

-1-2-312-1

6

-1000-1-1

6

-9-7-5-3-21

樣例輸出

-120

12

0

945

思路

這個題目其實不難。我們先分析一下這個題目。

這個題目要我們從一組數據中選取五個數使得這五個數乘積最大。

簡單一想這個不很簡單我們直接從中選取五個最大的數字然后將這五個數的成乘積直接輸出不就完了嗎。但是仔細一想又發現不對。剛剛只局限于正數的情況可是這里還有負數呢!所以我們要對這選出來的五個數分情況討論。

我們要讓乘積最大那么選出來的五個數的乘積都盡量應該是正數所以我們如果要選擇負數那么也最好讓它成雙成對的出現因為負負得正并且這個負數越小乘積就越大。根據此推斷我們將這五個數分為以下幾種情況。

一:0個負數5個正數。即選出這個數列里最大的五個數。

二:2個負數3個正數。即選出這個數列里最大的三個數和最小的兩個數。

三:4個負數1個正數。即選出這個數列里最大的一個數和最小的四個數。

然后我們將這三種情況算出來的乘積取一個最大值即可。

但是這樣就完了嗎?不你想多了。因為如果這nnn個數全是負數怎么辦?

很簡單我們為了讓乘積最大我們將會選取最大的五個負數。但當我們再回頭看一下發現這不就是第一種情況嗎?

所以我們就不需要特判這種情況了。

代碼

#includebits/stdc++.h

usingnamespacestd;

longlonga[100005];

intn;

intt;

intmain()

freopen("maximum.in","r",stdin);

freopen("maximum.out","w",stdout);

//文件名輸入輸出

cint;

while(t--)

cinn;

for(inti=1;i++i)

cina[i];

//輸入

sort(a+1,a+n+1);//給這個數組排序

coutmax(a[n]*a[n-1]*a[n-2]*a[n-3]*a[n-4],max(a[n]*a[n-1]*a[n-2]*a[1]*a[2],a[n]*a[1]*a[2]*a[3]*a[4]))endl;//按照思

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論