巨坑的一个测试点:(测试点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题题解(溜