Kolakoski序列的生成——搜狐2018研发类笔试编程题

Kolakoski序列的生成——搜狐2018研发类笔试编程题_第1张图片

输出描述:

Kolakoski序列的生成——搜狐2018研发类笔试编程题_第2张图片

代码如下,菜鸟一枚,欢迎批评指正:

#include 
#include 
#include 

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 count;//维护一个数组,存放每一组输出的元素的个数
	vector vm;
	while (cin >> n >> m) {
		vector().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().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;
}


你可能感兴趣的:(笔试编程)