思路:
开个新的数组来保存Ducci 序列,每次abs后,作判断。只有两种LOOP或ZERO结果,只需判断一项。
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
bool zeo_jud(int *a,int len)
{
for(int i=0;i<len;i++)
{
if(a[i]!=0)
return false;
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,flag=0;
cin>>n;
int d[n],t[n];
for(int i=0;i<n;i++)
cin>>d[i];
for(int i=0;i<n;i++)
t[i]=abs(d[i%n]-d[(i+1)%n]);
int k=1000;//来自题意,不做这样的处理就会超时
while(k--)
{
if(zeo_jud(t,n))
{
cout<<"ZERO"<<endl;
flag=1;
break;
}
int z=t[0];//先保存,因为t[0]会被覆盖
for(int i=0;i<n-1;i++)
t[i]=abs(t[i]-t[i+1]);
t[n-1]=abs(z-t[n-1]);
}
if(!flag)
cout<<"LOOP"<<endl;
}
return 0;
}