/*給定一個序列 序列內(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)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 下面選了最近十年里,十位名人所做的畢業(yè)演講。那么多的故事與經(jīng)歷,其實(shí)只想告訴你一件事: 面對迷茫和不確定的未來,我...
- 野球場,是講規(guī)矩的。 野球場的人,都是有故事的。 1 在野球場子里,判斷力是真的很重要的一件事情。有時(shí)候你看著一個...
- 一 最近好多人在朋友圈曬書,許多書是聽也沒聽過的,什么《月亮與六便士》、《在路上》,感覺比一般的文藝青年曬《從你的...