插flag记得break
因为不希望scanf读不完所以插了flag,并且判断flag来进入,这就导致一个循环标记flag后没有及时退出,又被覆盖。
#include<bits/stdc++.h>
using namespace std;
int queen[1010];
bool jug(int a,int b){
int m=queen[a];
int n=queen[b];
if(m==n) return true;
if(m-n==b-a) return true;
if(m-n==a-b) return true;
return false;
}
int main(){
int n;
int m;
bool flag;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&m);
flag=false;
for(int j=0;j<m;j++){
scanf("%d",&queen[j]);
if(!flag) for(int k=0;k<j;k++){
flag=jug(k,j);
break;
}
}
if(flag){
printf("NO\n");
}
else{
printf("YES\n");
}
}
return 0;
}