Kolakoski序列的生成——搜狐2018研发类笔试编程题
最新推荐文章于 2024-04-24 08:12:16 发布
原创最新推荐文章于 2024-04-24 08:12:16 发布·630 阅读
0·
·
0
·
0
0·CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文介绍了一个使用C++实现的序列生成算法,该算法通过读取初始数值序列并根据特定规则生成新的数值序列。文中详细展示了如何利用vector容器和循环结构来实现这一过程,并提供了完整的代码示例。输出描述:
代码如下,菜鸟一枚,欢迎批评指正:
#include <iostream>#include <vector>#include <algorithm>using namespace std;//维护一个count数组,存放每一组输出元素的个数//由于count[i]里存放的是第i组序列所输出的数的个数,所以遍历count的每一个元素,//就能找到第i+1组序列需要输出的数的个数所在count数组中的位置,而根据count的下标//就能确定那一组输出的值,就是第i+1组需要输出的元素个数//不断地递增计数cnt,直到达到n退出int main(){int n;int m;int x;int i;int j;int k;int num = 0;int cnt = 0;vector<int> count;//维护一个数组,存放每一组输出的元素的个数vector<int> vm;while (cin >> n >> m) {vector<int>().swap(vm);if (n > 0 && n < 10000 && m > 1 && m < 1000) {for (i = 0;i < m;++i) {//输入用于生成序列的数,放在数组vm内cin >> x;if (x > 0 && x < 1000) {if (i > 0) {if ((x != vm[i - 1]) && (i != m - 1))vm.push_back(x);else if ((i == m - 1) && x != vm[0]) {vm.push_back(x);}}else if (i == 0)vm.push_back(x);}}vector<int>().swap(count);//清空维护的存放每一组输出几个数的数组while (n) {//一直循环输出,直到达到要求输出的项数n才退出if (count.size() == 0) {for (j = vm[0];j > 0;--j) {cout << vm[0] << endl;//输出vm[0]的值cnt++;if (cnt == n) {cnt = 0;n = 0;break;}}count.push_back(vm[count.size()]);//当输出的是序列第一组时,count[0]里存放vm[0]的值}else if (count.size() == 1 && vm[0] == 1) {int a;for (a = 0;a < vm[1];++a) {cout << vm[1] << endl;cnt++;if (cnt == n) {cnt = 0;n = 0;break;}}count.push_back(vm[1]);//当vm[0]是1的时候,count[1]存放的是vm[1]}else {for (k = 0; k < count.size();k++) {for (j = 0;j < count[k];++j) {num++;if (num == count.size() + 1) {num = 0;count.push_back(vm[k%m]);for (int a = 0;a < vm[k%m];++a) {cout << vm[(count.size() - 1) % m] << endl;cnt++;if (cnt == n) {cnt = 0;n = 0;break;}}k = count.size() - 1;break;}}}}}}}return 0;}
参与评论您还未登录,请先登录后发表或查看评论
















1043
























