输入n个元素组成的序列S,找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,输出0(表示无解)。
#include<stdio.h>
#include<string.h>
int main()
{
int n,m=0,s1=1,s2=1,s,g=0;
while (scanf("%d", &n) == 1 && n != EOF)
{
int a[100] = { 0 };
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n; i++)//计算大于0的分a组,小于0的分b组
{
if (a[i] > 0) { g = 1; s1 = a[i]*s1; }//令g=1判断是否有正数
if (a[i] < 0) { m += 1; s2 = s2*a[i]; }//m判断负数个数是否为偶数,是则积乘为正
}//第一个if两个作用,负数积乘为正,a组无正数,或者a组有正数都可以输出。
if (m % 2 == 0) { s = s1 * s2; printf("%d\n", s); }
if (g == 0 && m == 0) printf("0\n"); //负数乘积为负数,且无正数输入
if (g ==1 && m % 2 != 0) { printf("%d\n", s1); }//负数乘积为负数,有正数输入
}
return 0;
}