#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,M,T=1;
while(1)
{
scanf("%d%*c",&N);
if(N>=2&&N<=21) break;
}
while(1)
{
scanf("%d%*c",&M);
if(M>=2&&M<=N) break;
}
int *p=(int *)malloc(sizeof(int)*N);
for(int i=0;i<N;++i) scanf("%d",&p[i]); //输入N个数
for(int i=0;i<N-1;++i) //绝对值从大到小排序
{
for(int j=i+1;j<N;++j)
{
if(abs(p[i])<abs(p[j]))
{
int m=p[i];
p[i]=p[j];
p[j]=m;
}
}
}
for(int i=0;i<M;++i) T*=p[i]; //前M个数的积
if(T<0&&M!=N)
{
int i=0;
while(p[i]<=0&&i<N) ++i; //如果积小于0,找出最大的负数的位置,只存在以下三种情况
--i;
if(i<M) T=T/p[i]*p[M]; //M个数里有奇数个负数
else if(i>=M&&i<N-1) T=T/p[M-1]*p[i]; //M个数都是负数,所以只能在M个数之后找一个正数
else if(i==N-1){ //N个整数都是负数
T=1; //重置积
for(int i=N-1;i>N-M-1;--i) T*=p[i]; //后M个数的积
}
}
printf("%d\n",T);
free(p);
return 0;
}
[此贴子已经被作者于2016-11-29 21:42编辑过]