题目描述
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 <stdio.h>
int main(void)
{
int i, j, k = 0, x = 0;
int n = 0, m = 0;
int a[1000];
int kol[10000] = { 0 };
scanf("%d",&n);
scanf("%d",&m);
for (i=0;i<m;i++)
{
scanf("%d", &a[i]);
}
kol[0] = a[0];
if (a[0] == 1)kol[1] = a[1];
for (i = 0;; i++)
{
for (j = 0; j < kol[i]; j++)
{
kol[k] = a[x % m] ;
printf("%d\n",kol[k]);
k++;
if (k > n)break;
}
x++;
if (k > n)break;
}
return 0;
}