UVA - 1594 Ducci Sequence

/*
  做这题时的心路历程其实挺有趣的
  
  一开始看到说Ducci序列最终要么全0,要么循环,我在想:
  
  要怎么判断循环呢?是不是还得记录下循环节什么的?是该用数组记录循环节吗?还是想要让我们利用STL来记录?
  
  后来又读了一次题,发现自己真是跑偏了,既然说全0或者循环,只要不是全0,最终就一定是循环嘛...我究竟是在纠结些什么 T^T 判断全0可不是比判断循环容易多了么?...
  
  此题其实没什么难度,但我当时有些一根筋...唉
*/


   

#include 
#include 
#include 
using namespace std;
const int maxn = 20;
int a[maxn];
int n;

bool all_zero()
{
	for (int i = 1; i <= n; i++)
	if (a[i]) return 0;
	return 1;
}

int solve() //全0返回0,循环返回1 
{
	int k, b[maxn]; // k 为循环次数 
	for (k = 0; k <= 1000; k++)
	{
		for (int i = 1; i < n; i++)
		{
			b[i] = abs(a[i] - a[i + 1]);
		}
		b[n] = abs(a[n] - a[1]);
		
		memcpy(a + 1, b + 1, sizeof(int) * n);
		
		if (all_zero()) return 0;
	}
	return 1;
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		cin >> n;
		for (int i = 1; i <= n; i++) cin >> a[i];
		if (solve()) cout << "LOOP" << endl;
		else cout << "ZERO" << endl;
	}
	return 0;
}


你可能感兴趣的:(UVa,oj,算法竞赛入门经典)