您的位置:首页 > 其它

UVa 1594 Ducci队列

2015-12-03 14:36 603 查看
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1,a2,···,an),

the next n-tuple in the sequence is formed by taking the absolute differences of neighboring integers:

 (a1,a2,···,an) → (|a1 −a2|,|a2 −a3|,···,|an −a1|)

Ducci sequences either reach a tuple of zeros or fall into a periodic loop.

For example, the 4-tuple sequence starting with 8,11,2,7 takes 5 steps to reach the zeros tuple: 

(8,11,2,7) → (3,9,5,1) → (6,4,4,2) → (2,0,2,4) → (2,2,2,2) → (0,0,0,0). 

The 5-tuple sequence starting with 4,2,0,2,0 enters a loop after 2 steps:

 (4,2,0,2,0) → (2,2,2,2,4) →
(0,0,0,2,2) → (0,0,2,0,2) → (0,2,2,2,2) → (2,0,0,0,2) → (2,0,0,2,0) → (2,0,2,2,2) → (2,2,0,0,0) → (0,2,0,0,2) → (2,2,0,2,2) → (0,2,2,0,0) → (2,0,2,0,0) → (2,2,2,0,2) → (0,0,2,2,0) → (0,2,0,2,0) → (2,2,2,2,0)
→ (0,0,0,2,2) →···


 Given an n-tuple of integers, write a program to decide if the sequence is reaching to a zeros tuple or a periodic loop.

Input

Your program is to read the input from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case starts with a line containing an integer n (3 ≤ n ≤ 15), which represents the size of
a tuple in the Ducci sequences. In the following line, n integers are given which represents the n-tuple of integers. The range of integers are from 0 to 1,000. You may assume that the maximum number of steps of a Ducci sequence reaching zeros tuple or making
a loop does not exceed 1,000.
Output

Your program is to write to standard output. Print exactly one line for each test case. Print ‘LOOP’ if the Ducci sequence falls into a periodic loop, print ‘ZERO’ if the Ducci sequence reaches to a zeros tuple.
Sample Input





8 11 2 7

 5 

4 2 0 2 0 



0 0 0 0 0 0 0 



1 2 3 1 2 3

Sample Output

ZERO

LOOP

ZERO

LOOP

题目题意比较容易理解

刚看到的时候一直在想怎么去搜索重复这个问题,想了好久好久,突然发现,题目中明确说明最多1000次计算,就一定能确定是LOOP还是ZERO

所以直接闷头计算1000次,直接判断是否全为0即可

代码也挺容易看懂:

#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
int Numb[2][20];//通过两个数组的奇偶来滚动使用
int t;
int n;
while(cin>>t){
for(int i = 0; i<t; ++i){
cin>>n;
for(int j = 0; j<n; ++j){
cin>>Numb[0][j];
}
for(int j =0; j<1000; ++j){
int a = j%2;
int b = (j+1)%2;
for(int k = 0; k<n; ++k){
Numb[b][k] = abs(Numb[a][k]-Numb[a][(k+1)%n]);
}
}
bool f = true;//
//判断是否为ZZERO,初始为是
for(int j = 0; j<n; ++j){
if(Numb[0][j]!=0){
f = false;
break;
}
}
if(f){cout<<"ZERO"<<endl;}
else{cout<<"LOOP"<<endl;}
}
}
}

/*
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
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva 算法入门