溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++怎么獲取最大乘積

發(fā)布時間:2021-08-20 17:32:36 來源:億速云 閱讀:109 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“c++怎么獲取最大乘積”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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

    最大乘積

    內(nèi)存限制:256 MiB

    時間限制:1000 ms

    輸入文件:maximum.in

    輸出文件:maximum.out

    題目類型:傳統(tǒng)

    評測方式:文本比較  

    題目描述

    給你 n n n個整數(shù) a 1 , a 2 , a 3 , a 4... a n a1,a2,a3,a4...an a1,a2,a3,a4...an 從中任意挑選出個數(shù)字,使得乘積最大,輸出乘積最大值。

    輸入格式

    輸入有多組測試數(shù)據(jù)。

    第一行為整數(shù) t t t,表示測試數(shù)據(jù)組數(shù)。

    每組測試數(shù)據(jù)第一行為整數(shù) n n n,表示數(shù)字的數(shù)量。

    每組測試數(shù)據(jù)第二行有 n n n個整數(shù) a 1 , a 2 , . . . . a n a1,a2,....an a1,a2,....an

    輸出格式

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

    樣例

    樣例輸入

    4

    5

    -1 -2 -3 -4 -5

    6

    -1 -2 -3 1 2 -1

    6

    -1 0 0 0 -1 -1

    6

    -9 -7 -5 -3 -2 1

    樣例輸出

    -120

    12

    0

    945

    思路

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

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

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

    我們要讓乘積最大 那么選出來的五個數(shù)的乘積 都盡量應(yīng)該是正數(shù) 所以 我們?nèi)绻x擇負(fù)數(shù) 那么也最好讓它成雙成對的出現(xiàn) 因?yàn)樨?fù)負(fù)得正 并且這個負(fù)數(shù)越小乘積就越大。根據(jù)此推斷 我們將這五個數(shù)分為以下幾種情況。

    一:0個負(fù)數(shù) 5個正數(shù)。即選出這個數(shù)列里最大的五個數(shù)。

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

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

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

    但是這樣就完了嗎? 不你想多了。因?yàn)槿绻@ n n n個數(shù)全是負(fù)數(shù)怎么辦?

    很簡單 我們?yōu)榱俗尦朔e最大 我們將會選取最大的五個負(fù)數(shù)。但當(dāng)我們再回頭看一下 發(fā)現(xiàn)這不就是第一種情況嗎?

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

    代碼

    #include<bits/stdc++.h>
    using namespace std;
    long long a[100005];
    int n;
    int t;
    int main()
    {
    	freopen("maximum.in","r",stdin);
    	freopen("maximum.out","w",stdout);
    	//文件名輸入輸出 
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(int i=1;i<=n;++i)
    		cin>>a[i];
    		//輸入 
    		sort(a+1,a+n+1);// 給這個數(shù)組排序 
    		cout<<max(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;//按照思路中所講的三種情況進(jìn)行取最大值 并記得換行 
    	}
    	return 0;//返回 0 
    }

    “c++怎么獲取最大乘積”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    c++
    AI