zoukankan      html  css  js  c++  java
  • Kolakoski序列产生器

     1 /*
     2 本程序说明:
     3 
     4 Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。
     5 他的前几项为1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,
     6 如果相同数字是一组,则每一组的个数为1,2,2,1,1,2,1,2,2,1,2,2,1,1
     7 a(n)等于第n组数的长度,因此是自描述的。目前没有递推公式,只能用自描述方式给出
     8 题为Kolakoski序列的变形,可输入任意一组数,构建Kolakoski序列
     9 输入为 n m. n是长度,m是给的数个数,剩下一行是数组.
    10  20 2
    11  1 2
    12  输出:1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1
    13  30 4
    14  2 1 3 1
    15  输出:2 2 1 1 3 1 2 2 2 1 3 3 1 1 2 2 1 3 3 3 1 1 1 2 1 3 3 1 1 2
    16 
    17 */
    18 #include <iostream>
    19 #include <vector>
    20 using namespace std;
    21 
    22 int main()
    23 {
    24     int n,m;
    25     while(cin>>n>>m){
    26         vector<int> v(m);
    27         for(int i=0;i<m;++i){
    28             cin>>v[i];
    29         }
    30         vector<int> res;
    31 
    32         int i=0;
    33         int j=0;
    34         int tmp=v[0];//启动项
    35         int count=0;
    36         while(count<n){
    37             while(tmp--){
    38                 res.push_back(v[i]);
    39                 ++count;
    40                 if(count==n)
    41                     break;
    42             }
    43             ++i;
    44 //            if(i==(int)v.size())//v到达尾部,重新置为头部开始循环
    45 //                i=0;
    46             //
    47             i%=(int)v.size();
    48 
    49             ++j;
    50             tmp=(res.size()<2)?v[1]:res[j];//防止res位数不够
    51         }
    52         for(int val:res)
    53             cout<<val<<" ";
    54     }
    55     return 0;
    56 }

     原题截图:

    『注:本文来自博客园“小溪的博客”,若非声明均为原创内容,请勿用于商业用途,转载请注明出处http://www.cnblogs.com/xiaoxi666/』
  • 相关阅读:
    【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!
    CentOS6.4安装Apache+MySQL+PHP
    第一次在博客园写博客。。。新人
    C# 简单生成双色球代码
    从客户端中检测到有潜在危险的 Request.Form 值 方法
    经典实例
    js鼠标键禁用功能
    逻辑思维题
    C#运算符笔记
    C#基础
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/7452189.html
Copyright © 2011-2022 走看看