此题难点在于负负得正,因此需要维护两个值

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