zoukankan      html  css  js  c++  java
  • Ducci 序列

    题意:

                           对于一个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或者循环。   

    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




    思路分析:
    用循环,依次相减,取绝对值。每循环完一次就判断是否全部为0(这里可以定义两个同等长度的数组,作为比较的那个数组可以全部赋值为0),
    否则一直循环,直到1000次结束,可判断为循环。详细代码如下:
     1 #include<iostream>
     2 #include<vector>
     3 #include<cmath>
     4 using namespace std;
     5 vector<int>ad;      //定义两个不定长数组
     6 vector<int>aa;
     7 int main()
     8 {
     9     int t;
    10     cin >> t;
    11     while (t--)
    12     {
    13         int n, a = 0;
    14         cin >> n;
    15         ad.resize(n);    //两个数组的长度 
    16         aa.resize(n);
    17         for (int i = 0; i < n; i++)
    18         {
    19             cin >> ad[i];                //输入两个数组,并把其中一个数组全部归0
    20             aa[i] = 0;                       
    21         }                                     
    22         for (int i = 1; i <= 1000; i++)
    23         {
    24             int k = 0;
    25             k = ad[0];                 //把第一数先存起来,以便后面的an-a1.
    26             for (int j = 0; j < n - 1; j++)
    27             {
    28 
    29                 ad[j] = abs(ad[j] - ad[j + 1]);
    30             }
    31             ad[n - 1] = abs(k - ad[n - 1]);         
    32 
    33             if (ad == aa)             //判断此时是否全部的数都变成0了
    34             {
    35                 a = 1;                    
    36                 cout << "ZERO" << endl;
    37                 break;
    38 
    39             }
    40 
    41         }
    42         if (a == 0)                  //Ducci序列一直在循环,输出LOOP
    43             cout << "LOOP" << endl;
    44     }
    45     //system("pause");
    46     return 0;
    47 }

    心得:需要判断的时候可以加个标志性语句,如flag=0或者flag=1;比较的时候可以加个一样的数组,如本题,就不用每一个都去比较一次,减少代码的数量。这个题的难度还好,哈哈,加油加油~~Nonoha






















    ------------------------ 没有谁的人生不是斩棘前行 ---------------------------------------- JM
  • 相关阅读:
    css3(持续更新...)
    em,rem,px之间的转换
    document.compatMode属性
    CSS hack(CSS浏览器兼容)
    JavaScript正则表达式
    Django数据库sqlite转mysql
    Markdown 使用指南
    centos7下docker 部署javaweb
    CMD命令大全
    {dockerUI}在服务器上直接安装shipyard/shipyard
  • 原文地址:https://www.cnblogs.com/Lynn0814/p/4674402.html
Copyright © 2011-2022 走看看