码迷,mamicode.com
首页 > 其他好文 > 详细

Ducci Sequence解题报告

时间:2015-07-16 23:54:10      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:

A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1a2, ... an), the next n-tuple in the sequence is formed by taking the absolute differences of neighboring integers:

 

 

a1a2... 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.

The following shows sample input and output for four test cases.

 

Sample Input 

 

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

 

Sample Output 

 

ZERO 
LOOP 
ZERO 
LOOP


题意:给你一个数组,相邻数相加(最后一个数应该加第一个数),然后又可以得到一个新的数组,反复进行这样的步骤,结果会有两种,数组每个成员都是零,或者在这样的过程中出现了周期,即出现了和以前已经出现过的相同的项。
最后要求判断是哪一种情况

思路:
如果按照一般的解题思想,每得到一个新的数组都去判断是zero,还是loop。zero还好说,如果判断loop那就要每次遍历一遍数组,程序肯定会超时。、
所以~~~
反正结果只有两种可能,不是loop,就是zero,只判断zero就好了

代码:
#include"iostream"
#include"cstring"
using namespace std;
 
const int maxn=1010;
const int maxm=16;
int len;
int loop=0,zero=0;

int a[maxn][maxm];

int swift(int number)
{
	return (number<0)?-number:number;
}

void Init()
{
cin>>len;
for(int i=0;i<len;i++)
cin>>a[0][i];
}


void Work()
{
int flag=0;
for(int j=1;j<maxn;j++)
{
for(int i=0;i<len;i++)
{
	if(i==len-1)
		a[j][i]=swift(a[j-1][i]-a[j-1][0]);
	else
        a[j][i]=swift(a[j-1][i]-a[j-1][i+1]);
}

for(int h=0;h<len;h++)
if(a[j][h]!=0) {flag=1;break;}
if(flag==0) {zero=1;return;}
else flag=0;
}
}



int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		Init();
		Work();
		if(zero)
		{
        cout<<"ZERO"<<endl;
		 zero=0;
		}
		else 
		cout<<"LOOP"<<endl;
	}
	return 0;
}

 

Ducci Sequence解题报告

标签:

原文地址:http://www.cnblogs.com/zsyacm666666/p/4652545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!