巨坑的一个测试点:(测试点8)4 10 10 -1 20。如果不注意程序会输出0,但正确答案是-1,因为数列中数的取值范围是1~1,000,000,不包括0。
最简单的思路大概就是分情况,-1在前三个数是一种情况,在3以后又是一种情况,因为数据少,可以直接无脑循环判断是否满足数列条件。
#include <stdio.h>
int main(void)
{
    int T, I, n, a, i;
    scanf("%d",&T);
    for(I=0; I<T; I++)
    {
        scanf("%d",&n);
        int num[n];
        for(i=0; i<n; i++){
            scanf("%d",&num[i]);
            if(num[i]==-1)
                a=i;}
        if(a==0) num[0]=num[3]-num[2]-num[1];
        else if(a==1) num[1]=num[3]-num[2]-num[0];
        else if(a==2) num[2]=num[3]-num[1]-num[0];
        else num[a]=num[a-1]+num[a-2]+num[a-3];
        for(i=0; i<n-3; i++)
            if(num[i]+num[i+1]+num[i+2]!=num[i+3] || num[i]==0 || num[i+1]==0 || num[i+2]==0 || num[i+3]==0)
                break;
        if(i==n-3)
            printf("case #%d:\n%d\n",I,num[a]);
        else
            printf("case #%d:\n-1\n",I);
    }
    return 0;
}
C语言(C班)D题题解(溜