zoukankan      html  css  js  c++  java
  • Ducci Sequence

    Description

    Download as PDF
     

    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$displaystyle 
ightarrow$ (| 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) $displaystyle 
ightarrow$ (3, 9, 5, 1) $displaystyle 
ightarrow$ (6, 4, 4, 2) $displaystyle 
ightarrow$ (2, 0, 2, 4) $displaystyle 
ightarrow$ (2, 2, 2, 2) $displaystyle 
ightarrow$ (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) $displaystyle 
ightarrow$ (2, 2, 2, 2, 4) $displaystyle 
ightarrow$ ( 0, 0, 0, 2, 2$displaystyle 
ightarrow$ (0, 0, 2, 0, 2) $displaystyle 
ightarrow$ (0, 2, 2, 2, 2) $displaystyle 
ightarrow$ (2, 0, 0, 0, 2) $displaystyle 
ightarrow$
    (2, 0, 0, 2, 0) $displaystyle 
ightarrow$ (2, 0, 2, 2, 2) $displaystyle 
ightarrow$ (2, 2, 0, 0, 0) $displaystyle 
ightarrow$ (0, 2, 0, 0, 2) $displaystyle 
ightarrow$ (2, 2, 0, 2, 2) $displaystyle 
ightarrow$ (0, 2, 2, 0, 0) $displaystyle 
ightarrow$
    (2, 0, 2, 0, 0) $displaystyle 
ightarrow$ (2, 2, 2, 0, 2) $displaystyle 
ightarrow$ (0, 0, 2, 2, 0) $displaystyle 
ightarrow$ (0, 2, 0, 2, 0) $displaystyle 
ightarrow$ (2, 2, 2, 2, 0) $displaystyle 
ightarrow$ ( 0, 0, 0, 2, 2$displaystyle 
ightarrow$ ...

    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$ le$n$ le$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



    这题的意思就是输入n个数,相邻两个数相减的绝对值赋给前一个数,最后一个数与第一个数相减。如此循环下去如果在一千次以内数列的所有数都是0了,就输出ZERO,否则输出LOOP。


    代码如下:

    #include <iostream>
    using namespace std;
    int main()
    {
    int T;
    cin>>T;
    while(T--)
    {
    int n,a[20];
    cin>>n;
    int flag=0;                     //每次输入完都要把flag归零
    for(int i=0;i<n;i++)
    cin>>a[i];
    for(int j=0;j<1000;j++)
    {
    int f=a[0];                     //因为先是a[0]与a[1]运算再赋值给a[0],a[0]的值会变,所以要先把a[0]的值赋给f。
    int s=0;
    for(int i=0;i<n-1;i++)
    {
    if(a[i]>=a[i+1])
    a[i]=a[i]-a[i+1];
    else
    a[i]=a[i+1]-a[i];
    s+=a[i];                     //求数组0到n-2的和。
    }
    if(f>=a[n-1])
    a[n-1]=f-a[n-1];
    else
    a[n-1]=a[n-1]-f;
    s+=a[n-1];               // 再加上a[n-1]的值。
    if(s==0)
    {
    flag=1;
    break;
    }
    }
    if(flag)
    cout<<"ZERO"<<endl;
    else
    cout<<"LOOP"<<endl;

    }
    return 0;
    }

    第一次写博客,望各位海涵。



  • 相关阅读:
    jqueryui 进度条使用
    第一阶段站立会议03
    第一阶段站立会议02
    第一阶段站立会议01
    找到了——电梯会议
    软件需求规格说明书
    团队项目计划会议
    软件开发团队简介
    找水王
    NABCD需求分析
  • 原文地址:https://www.cnblogs.com/huangguodong/p/4654547.html
Copyright © 2011-2022 走看看