前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kolakoski序列产生器

Kolakoski序列产生器

作者头像
xiaoxi666
发布2018-10-29 17:16:29
6560
发布2018-10-29 17:16:29
举报
文章被收录于专栏:xiaoxi666的专栏xiaoxi666的专栏
代码语言:javascript
复制
 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 }

 原题截图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档