对于一个n元组(a1, a2, …, an),可以对于每个数求出它和下一个数的差的绝对值,得到一个新的n元组(|a1-a2|, |a2-a3|, …, |an-a1|)。重复这个过程,得到的序列称为Ducci序列,例如:
(8, 11, 2, 7) -> (3, 9, 5, 1) -> (6, 4, 4, 2) -> (2, 0, 2, 4) -> (2, 2, 2, 2) -> (0, 0, 0, 0).
也有的Ducci序列最终会循环。输入n元组(3≤n≤15),你的任务是判断它最终会变成0还是会循环。输入保证最多1000步就会变成0或者循环。
4
4
8 11 2 7
5
4 2 0 2 0
7
0 0 0 0 0 0 0
6
1 2 3 1 2 3
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
#define MAX_N 15
int main()
{
freopen("data5_2_h.in", "r", stdin);
freopen("data5_2_h.out", "w", stdout);
int n,m,k,a[MAX_N];
cin >> n;
for (int i = 0; i < n; i++)
{
//获取一组信息
cin >> m;
for (int j = 0; j < m;j++)
cin >> a[j];
//进行信息处理
for (k = 0; k < 1000; k++)
{
int val,count=0,f_ele = a[0];
for (int j = 0; j < m; j++)
{
if (j == m - 1)
val = a[j] - f_ele;
else
val = a[j] - a[j + 1];
val > 0 ? a[j] = val : a[j] = -val;
if (a[j] == 0)
count++;
}
if (count==m)
break;
}
k == 1000 ? cout << "LOOP
" : cout << "ZERO
";
}
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
return 0;
}