题意:按题中给出表达式计算序列为死循环还时变成0。
思路:用vector存放每次计算出的n元祖,首先判断每次计算的元组是否全为0,否则将放入set集合,检测set集合中是否出现过此元祖,出现说明为死循环!
代码:
#include <iostream>
#include <vector>
#include <set>
#include <math.h>
using namespace std;
vector<int>integer;
set< vector<int> >seq;//集合所存放的是n元组
bool judgeZore(int a[],int n)
{
int cot = 0;
for(int i=0;i<n;i++)
if(a[i] == 0)
cot++;
if(cot == n)
return true;
return false;}
bool judgeLoop()
{
if(seq.count(integer))
return true;
seq.insert(integer);
return false;}
int main()
{
int t,n,figital,a[20];
cin >> t;
while(t--)
{
cin >> n;
for(int i=0;i<n;i++)
{
cin >> figital;
integer.push_back(figital);
a[i] = figital;
}
seq.insert(integer);
while(true)
{
integer.clear();
int temp = a[0];
for(int i=0;i<n-1;i++)
{
a[i] = abs(a[i]-a[i+1]);
integer.push_back(a[i]);
}
a[n-1] = abs(a[n-1]-temp);
integer.push_back(a[n-1]);
if(judgeZore(a,n))
{
cout << "ZERO" << endl;
break;
}
if(judgeLoop())
{
cout << "LOOP" << endl;
break;
}
}
seq.clear();
}
return 0;
}