-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
- 给定一个整数数组,我们希望去掉其中一个数,使得剩下所有数的乘积最大,问应该去掉哪一个数 输入
-
第一行M,表示有M组数据
接下来2*M行,每两行表示一组测试数据,每组的第一行市一个整数N,表示是数组的长度,接下来一行有N个整数,表示数组的内容,3<=N<=100,且数组内每个数都在[-10000000,10000000]区间内.
输出
- M行,每行一个整数,表示应该去掉的那个数,如果有多个选择,则输出最先输入的那个. 样例输入
-
4 3 0 1 2 5 2 3 5 4 8 5 -1 -2 -3 -4 -5 4 -1 -2 -3 -4
样例输出
-
0 2 -1 -4
问题链接:Bailian4021 最大乘积
问题分析:需要看负数的个数,自然数的个数,然后根据个数去除一个最小值或绝对值最小值。程序说明:
旧版本程序出现WA,经过网友指正,已经AC。问题出在有0的情况下,需要特殊处理,没有考虑周全。
题记:(略)
AC的C语言程序如下:
/* Bailian4021 最大乘积 */
#include <stdio.h>
#include <limits.h>
int main(void)
{
int m, n, a, i;
int ncount, maxn, minn, pcount, minp, zcount, first, second;
scanf("%d", &m);
while(m--) {
scanf("%d", &n);
ncount = 0; /* 负数个数 */
maxn = INT_MIN; /* 负数最大值 */
minn = 0; /* 负数最小值 */
pcount = 0; /* 自然数个数 */
minp = INT_MAX; /* 自然数最小值(包括0) */
zcount = 0; /* 零的个数 */
for(i=1; i<=n; i++) {
scanf("%d", &a);
if(i == 1)
first = a;
else if(i == 2)
second = a;
if(a < 0) {
ncount++;
if(a > maxn)
maxn = a;
else if(a < minn)
minn = a;
} else {
if(a == 0)
zcount++;
pcount++;
if(a < minp)
minp = a;
}
}
if(zcount >= 2)
printf("%d\n", first);
else if(zcount == 1 && ncount % 2 == 1)
printf("%d\n", first == 0 ? second : first);
else if(ncount == 0)
printf("%d\n", minp);
else if(pcount == 0)
printf("%d\n", (ncount % 2 == 1) ? maxn : minn);
else if(ncount % 2 == 1)
printf("%d\n", maxn);
else
printf("%d\n", minp);
}
return 0;
}
WA的C语言程序如下:
/* Bailian4021 最大乘积 */
#include <stdio.h>
#include <limits.h>
int main(void)
{
int m, n, a, i;
int ncount, maxn, minn, pcount, minp;
scanf("%d", &m);
while(m--) {
scanf("%d", &n);
ncount = 0; /* 负数个数 */
maxn = INT_MIN; /* 负数最大值 */
minn = 0; /* 负数最小值 */
pcount = 0; /* 自然数个数 */
minp = INT_MAX; /* 自然数最小值(包括0) */
for(i=1; i<=n; i++) {
scanf("%d", &a);
if(a < 0) {
ncount++;
if(a > maxn)
maxn = a;
else if(a < minn)
minn = a;
} else {
pcount++;
if(a < minp)
minp = a;
}
}
if(ncount == 0)
printf("%d\n", minp);
else if(pcount == 0)
printf("%d\n", (ncount % 2 == 1) ? maxn : minn);
else if(ncount % 2 == 1)
printf("%d\n", maxn);
else
printf("%d\n", minp);
}
return 0;
}