此题难点在于负负得正,因此需要维护两个值
int main()
{
int n,i;//n为数组长度,i为循环变量
scanf("%d", &n);
int* nums = (int *)malloc(sizeof(int)*n);
for(i=0; i<n; i++)
{
scanf("%d", &nums[i]);
}
int maxF = nums[0], minF = nums[0], ans = nums[0];//maxf为i-1时最大正乘积,minf为i-1时最大负乘积
int mx,mn;
for (i = 1; i < n; ++i) {
mx = maxF;
mn = minF;
maxF = fmax(mx * nums[i], fmax(nums[i], mn * nums[i]));
minF = fmin(mn * nums[i], fmin(nums[i], mx * nums[i]));
ans = fmax(maxF, ans);
}
printf("%d", ans);
return 0;
}