C语言数组中最大连续子数组的乘积怎么算?(连续就是相邻两个数之间相差一如:1 2 3))

img


连续子组数指的是数字之间相差一,如:1 2 3和5 6 7是两个连续子数组,而5 6 7的乘积大于1 2 3的乘积,所以结果是5×6×7=210

试试这个

#include <stdio.h>
int main() {
    int list[100] = {0};
    char c;
    int i = 0 ;
    // 输入
    for ( i = 0 ; c != '\n' ; i++ ) {
        scanf("%d", &list[i]);
        scanf("%c", &c);
    }
    int max = list[0];
    // 获取遍历开头
    for ( int j = 0 ; j < i ; j++ ) {
        // 获取遍历结尾
        for ( int p = j ; p < i ; p ++ ) {
            printf(" %d - %d : ", j, p);
            // 获取是递增还是递减
            int rate = list[p] - list[j];
            // 遍历 开头到结尾值之和
            int value = 1;
            for ( int q = j ; q <= p ; q++  ) {
                value *= list[q];
                printf("%d ", value);
                if ( q != p ) {
                    if ( (list[q + 1] - list[q]) * rate < 0 ) {
                        printf("x");
                        break;
                    }
                }
                
            }
            printf("\n");
            if ( value > max ) {
                max = value;
            }
        }
    }
    printf("%d", max);
}