您的位置:首页 > 其它

我家博宇生日快乐!!!hdu5504

2015-10-22 20:38 288 查看
今天我的好队友生日,在这里祝她生日快乐,天天开心,么么哒

题目:点击打开链接

题解:

给你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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: