今天我的好队友生日,在这里祝她生日快乐,天天开心,么么哒
题解:
给你n个数,让你从中选任意的大于一个数,使得乘积最大,可能会出现负数,0
整体不难,就是特殊情况要考虑到
1,全为0
2,有且只有一个负数
3,有一个负数,其余全为0
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
int t,n,ans,j;
long long int sum;
long long int a[70],b[70];
cin>>t;
while(t--)
{
ans=0;
sum=1;
j=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<0)
{
b[j++]=a[i];
}
else if(a[i]==0) ++ans;
else sum*=a[i];
}
//printf("j=%d\n",j);
sort(b,b+j);
//for(int i=0;i<j;i++)
//printf("b[%d]=%d\n",i,b[i]);
if(j+ans==n)
{
if(j==0)
{
printf("0\n");
continue;
}
else if(j==1)
{
if(ans)
{
printf("0\n");
continue;
}
else
{
printf("%lld\n",a[0]);
continue;
}
}
}
if(j!=0&&j%2==0)
{
for(int i=0;i<j;i++)
{
sum*=b[i];
}
}
else if(j!=0)
{
for(int i=0;i<j-1;i++)
sum*=b[i];
}
printf("%lld\n",sum);
}
return 0;
}
王阿腾的代码,我改对的
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
int t,n,ans,j,bb;
long long int sum;
long long int a[70],b[70];
cin>>t;
while(t--)
{
ans=0;
bb=0;
sum=1;
j=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<0)
{
++ans;
b[j++]=a[i];
}
else if(a[i]==0) bb++;
else sum*=a[i];
}
sort(b,b+j);
if(j==1&&j==n)
{
printf("%d\n",a[0]);
continue;
}
else if(j==1&&n-j==bb)
{
printf("0\n");
continue;
}
else if(bb==n)
{
printf("0\n");
continue;
}
if(ans!=0&&ans%2==0)
{
for(int i=0;i<j;i++)
{
sum*=b[i];
}
}
else if(ans!=0)
{
for(int i=0;i<j-1;i++)
sum*=b[i];
}
printf("%lld\n",sum);
}
return 0;
}