搜狐2017笔试编程题--Kolakoski序列
2017-08-28 21:39
288 查看
题目描述:
----------------------------------------------------------------------------------------------------------------------------------------------------------
Kolakoski序列是个自主生成的无限序列。
例如,当给定的整数组为[1, 2]时,Kolakoski序列是这样的:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, ...]
如果我们将相邻的相同的数字分成一组,那么将会得到:
[[1], [2, 2], [1, 1], [2], [1], [2, 2], [1], [2, 2], [1, 1], [2], [1, 1], [2, 2], [1], [2], [1, 1], [2], [1], [2, 2], [1, 1],...]
可以看出,每组数字交替由1, 2组成。
接下来对每个分组求他的长度,得到:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, ...]
可以看出,经过如上的变换后,数列保持不变。
对于其他给定的整数组,同样可以用类似的方法构造Kolakoski序列,例如给定整数组[2, 3]时:
[2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3,...]
给定整数组[2, 1, 3, 1]时,构造得到如下:
[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,...]
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入描述:
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入由两行组成:
第一行包括两个正整数n, m
第二行包括m个正整数a[]
数据规模与限制:
0<n<10000
1<m<1000
0<a[i]<1000
a[i]不等于a[i+1]
a[0]不等于a[m-1]
输出描述:
每行一个数字,共n行
整数组a生成的Kolakoski序列的前n项
示例1:
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入:
30 4
2 1 3 1
输出:(此处为了书写方便采用逗号分隔)
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,
----------------------------------------------------------------------------------------------------------------------------------------------------------
C++代码实现:
----------------------------------------------------------------------------------------------------------------------------------------------------------
Kolakoski序列是个自主生成的无限序列。
例如,当给定的整数组为[1, 2]时,Kolakoski序列是这样的:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, ...]
如果我们将相邻的相同的数字分成一组,那么将会得到:
[[1], [2, 2], [1, 1], [2], [1], [2, 2], [1], [2, 2], [1, 1], [2], [1, 1], [2, 2], [1], [2], [1, 1], [2], [1], [2, 2], [1, 1],...]
可以看出,每组数字交替由1, 2组成。
接下来对每个分组求他的长度,得到:
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, ...]
可以看出,经过如上的变换后,数列保持不变。
对于其他给定的整数组,同样可以用类似的方法构造Kolakoski序列,例如给定整数组[2, 3]时:
[2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3,...]
给定整数组[2, 1, 3, 1]时,构造得到如下:
[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,...]
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入描述:
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入由两行组成:
第一行包括两个正整数n, m
第二行包括m个正整数a[]
数据规模与限制:
0<n<10000
1<m<1000
0<a[i]<1000
a[i]不等于a[i+1]
a[0]不等于a[m-1]
输出描述:
每行一个数字,共n行
整数组a生成的Kolakoski序列的前n项
示例1:
----------------------------------------------------------------------------------------------------------------------------------------------------------
输入:
30 4
2 1 3 1
输出:(此处为了书写方便采用逗号分隔)
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,
----------------------------------------------------------------------------------------------------------------------------------------------------------
C++代码实现:
#include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> iVec(m); for (int i = 0; i < m; ++i) { cin >> iVec.at(i); } vector<int> resVec(n); int count = 0; resVec.at(0) = iVec.at(0); int index1 = 0; int index2 = 0; while (count < 30) { int t = resVec.at(index1); while (t > 0) { resVec.at(count) = iVec.at(index2); count++; t--; } index1++; index2++; if (index2 == m) { index2 = 0; } } for (int i = 0; i < resVec.size(); ++i) { cout << resVec.at(i) << ", "; } cout << endl; system("pause"); return 0; }
相关文章推荐
- 搜狐2017 WEB前端开发 秋招笔试编程题
- 搜狐2017笔试编程题
- 2018年搜狐秋季校招校招大数据研发笔试编程题—Kolakoski序列
- 网易2017春招笔试真题编程题集合——2.优雅的点
- 腾讯2017秋招笔试编程题
- 阿里笔试题(2017在线编程题)-- 数串分组
- 牛客网解题-2017腾讯秋招笔试编程题练习卷
- 小易记单词--网易2017春招实习笔试编程题10
- 腾讯2017秋招笔试编程题:素数对 [python]
- 京东2017校招笔试编程题2:进制转换、辗转相除法
- 2016-9-21 搜狐技术类 笔试 2道编程题 又g了,求大神指点!
- 网易2017春招笔试真题编程题集合
- 京东2017实习生笔试编程题-终结者C
- 百度2017春招笔试真题编程题集合--度度熊回家
- 百度2017春招笔试真题编程题集合--寻找三角形
- 2017腾讯校招笔试编程题-拼凑零钱
- 赶去公司--网易2017春招实习笔试编程题2
- 腾讯2017秋招笔试编程题:游戏任务标记 [python]
- 2017校招去哪网,阿里,网易,中兴,华为笔试编程题五则(Python描述)
- 腾讯2017秋招笔试编程题