用两个队列q1,q2来模拟操作过程。
输入n个数字,q1,q2的区别是,q1一开始就开始将数字入队,而q2是从第二个数字开始入队,最后队尾再加入第一个数字,后续模拟过程亦是如此。
代码如下:
#include<cstdio>
#include<iostream>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
queue <int> q1,q2;
int n;
void print()
{
int flag,cnt=1;
while(1)
{
flag=0;cnt++;
int a,b;
for(int i=1;i<=n;i++)
{
a=q1.front();
b=q2.front();
a=(int)abs(a-b);
if(a!=0) flag=1;
q1.pop(); q2.pop();
q1.push(a);
if(i>1) q2.push(a);
}
a=q1.front();
q2.push(a);
if(!flag)
{
printf("ZERO\n");
break;
}
if(cnt>1001)
{
printf("LOOP\n");
break;
}
}
}
void clear()
{
while(!q1.empty()) q1.pop();
while(!q2.empty()) q2.pop();
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int a;
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
q1.push(a);
if(i>1) q2.push(a);
}
a=q1.front();
q2.push(a);
print();
clear();
}
return 0;
}