我还是懂得太少,这确实难度太大,求解答

问题:输入N个数字,判断其中连续5个数的最大值,连续的定义为按输入顺序,数列尾和数列首我们也认为是连续的,输入数据保证只会出现一组最大值

输入,怎样求出和最大的连续的5个数;
如:
输入:
20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
输出:
The position is 16,17,18,19,20
The numbers are 16,17,18,19,20
The MAX is 90

代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int N;
    int* p = 0;
    int i,j,max = 0,tp = 0;
    int index = 1;
    scanf("%d",&N);  
    if(N < 5)
    {
        printf("输入的数字小于5");
        return 0;
    }
    p = (int*)malloc((N+4)*sizeof(int));
    for(i=0;i<N;i++)
        scanf("%d",&p[i]);
    //复制前四个数到末尾
    for(i=0;i<4;i++)
    {
        p[N+i] = p[i]; 
        max += p[i];
    }
    
    max += p[4];
    for (i = 1;i<N;i++)
    {
        tp = 0;
        for (j=0;j<5;j++) //计算5个数的和
            tp += p[i+j];
        if(tp > max)
        {
            max = tp;
            index = i+1;
        }
    }
    printf("The position is ");
    for(i=0;i<5;i++)
    {
        if(i<4)
            printf("%d ",index+i);
        else
            printf("%d\n",index+i);
    }
    printf("The numbers are ");
    for(i=0;i<5;i++)
    {
        if(i<4)
            printf("%d ",p[index+i-1]);
        else
            printf("%d\n",p[index+i-1]);
    }
    printf("The Max is %d",max);
    free(p);
    p = 0;
    return 0;
}