这道题没有什么特别的方法,按照题目说的解,就可以解出来了,做的时候耐心一点,认真分析可以很快做出。好运?
题目说,每组数据小于16个并且循环1000次内可以出结果,所以我设了个二维数组。
并且把ZERO和LOOP分开分析,感觉清楚一些。
#include
#include
#include
#include
using namespace std;
int gh[1010][17]={0};
int main()
{
int m,flag=-1,sum=0;int n;
cin >> m;
while(m–)
{
memset(gh,0,sizeof(gh));
cin>>n;
for(int i=1;i<=n;i++)
cin>>gh[1][i];
int j;
for(j=2;;j++)
{
for(int i = 1;i <= n-1;i ++)
{
gh[j][i]=abs(gh[j-1][i]-gh[j-1][i+1]);
}
gh[j][n]=abs(gh[j-1][1]-gh[j-1][n]);
//ZERO
sum=0;
for(int i = 1;i <= n;i ++){
if(gh[j][i] == 0)
sum ++ ;}
if( sum == n)
{
flag=0;break;
}
//LOOP
for(int k=1;k<j;k++)
{
sum=1;
if(gh[k][1] == gh[j][1])
for(int i=2;i<=n;i++)
if(gh[k][i] == gh[j][i])
sum++;
if(sum == n)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
}
if(flag == 0)
cout<<“ZERO”<<endl;
else if(flag==1)
cout<<“LOOP”<<endl;
flag=-1;
}
return 0;
}