题目大意:给出N个数字,有一个运算,用当前这个数和它后面相减的绝对值代替掉当前的那个数,然后用最后一个和第一个的相减的绝对值代替到最后面那个数,问这样一直计算,最后是形成了循环还是所有数都变成了0
解题思路:把所有的数转换成字符串,中间用一个分隔符给开(这里我是用’,’),然后将字符串放到set里面进行判断
#include<cstdio>
#include<cstring>
#include<string>
#include<set>
#include<cmath>
#include<iostream>
using namespace std;
int num[20];
int main() {
int test, n;
scanf("%d", &test);
while(test--) {
scanf("%d", &n);
int mark = 1;
for(int i = 0; i < n; i++)
scanf("%d", &num[i]);
set<string> s;
string tmp;
for(int i = 0; i < n; i++) {
int t = num[i];
do{
tmp += t % 10 + '0';
t /= 10;
}while(t);
tmp += ',';
}
s.insert(tmp);
for(int i = 0; i < 1000; i++) {
int t = abs(num[n-1] - num[0]);
for(int i = 1; i < n; i++)
num[i-1] = abs(num[i] - num[i-1]);
num[n-1] = t;
tmp.clear();
int sum = 0;
for(int i = 0; i < n; i++) {
int t = num[i];
sum += t;
do{
tmp += t % 10 + '0';
t /= 10;
}while(t);
tmp += ',';
}
if(!sum) {
mark = 0;
break;
}
if(s.count(tmp) ) {
break;
}
s.insert(tmp);
}
if(mark)
printf("LOOP\n");
else
printf("ZERO\n");
}
return 0;
}