最大乘積問題

/*給定一個序列 序列內(nèi)部數(shù)字自由組合 求最大乘積*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#define T 30   
//30為數(shù)組最大長度
void quick_sort(int s[], int l, int r)
{
    int i, j, x;
    if (l < r)
    {
        i = l;
        j = r;
        x = s[i];
        while (i < j)
        {
            while (i < j && abs(s[j]) > abs(x))
                j--; /* 從右向左找第一個絕對值小于x的數(shù) */
            if (i < j)
                s[i++] = s[j];


            while (i < j && abs(s[i]) < abs(x))
                i++; /* 從左向右找第一個絕對值大于x的數(shù) */
            if (i < j)
                s[j--] = s[i];

        }
        s[i] = x;
        quick_sort(s, l, i - 1); /* 遞歸調(diào)用 */
        quick_sort(s, i + 1, r);
    }
}

int main()
{   
    int d,M=0;//M為組號
    int maray[T];//負(fù)數(shù)數(shù)組
    int paray[T];//正數(shù)數(shù)組
    int aray[T];//輸入的數(shù)組
    while(scanf("%d",&d)!=EOF&&d<=T){
    int j=0,k=0,mnum=0,pnum=0;//j為負(fù)數(shù)數(shù)組下標(biāo) k為正數(shù)數(shù)組下標(biāo) mnum為負(fù)數(shù)總數(shù) pnum為正數(shù)總數(shù)
    long long pmax=1;//最大乘積
    long long mmax=1;//定義負(fù)數(shù)最大乘積
    memset(maray,0,sizeof(maray));
    memset(paray,0,sizeof(paray));
    memset(aray,0,sizeof(aray));
    for (int i = 0; i < d; i++)
    {
        scanf("%d",&aray[i]);
        if (aray[i]<0)
        {
            maray[j]=aray[i];
            mmax*=maray[j]; //求負(fù)數(shù)最大乘積
            j++;
            mnum++;


        }
        else if (aray[i]>0)
        {
            paray[k]=aray[i];
            pmax*=paray[k]; //求正數(shù)最大乘積
            k++;
            pnum++;
        }

    }
        if (mnum%2!=0)
        {
            if (mnum==1)
            {
                mmax=1;
            }
            else{
            quick_sort(maray,0,j-1);
            mmax=mmax/maray[0];
        }
        }

        pmax*=mmax;

        if ((pnum==0&&mnum==1)||(pnum==0&&mnum==0))
        {
            pmax=0;
        }
        M++;
    printf("Case #%d: The maximum product is %lld.\n\n",M,pmax);

        }

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容