您的位置:首页 > 其它

Kolakoski序列--输出1,2的前n个数

2017-08-29 10:39 197 查看
Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列  。他在整数数列大全网站上排名第二位,足见该数列在组合数学界中的重要性。

Kolakoski序列是一个仅由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,…(OEIS上的A000002)
它的定义很简单,若把数列中相同的数定为一组,令a(1)=1,a(2)=2,则a(n)等于第n组数的长度。
可以根据这个定义来推算第三项以后的数:例如由于a(2)=2,因此第2组数的长度是2,因此a(3)=2,;
由于a(3)=2,所以第三组数的长度是2,因此a(4)=a(5)=1;由于a(4)=1,a(5)=1,所以第四组数和第五组数的长度都为1,因此a(6)=2,a(7)=1,以此类推。

https://baike.baidu.com/item/Kolakoski%E5%BA%8F%E5%88%97/16683856?fr=aladdin 



public class Main {

public void outPutKolakoski(int n) {
int[] a = new int[10000];

a[1] = 1;
a[2] = 2;
a[3] = 2;
int cnt = 3;
for (int i = 3; i < n && cnt < n; i++) {
for (int j = 1; j <= a[i]; j++) {
if (a[cnt] == 2) {
a[cnt + j] = 1;
} else {
a[cnt + j] = 2;
}
//                cnt += a[i];//在外面的for循环实现
}
cnt += a[i];
}//for
for (int i = 1; i < n; i++) {
System.out.print(a[i] + ",");
}
}//outPutKolakoski

public static void main(String[] args) {
new Main().outPutKolakoski(100);
}//100表示输出序列的前100个元素
}


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,2,1,1,2,1,2,2,1,2,2,1,1,2,1,2,2,1,2,1,1,2,1,1,2,2,1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,1,2,2,1,2,1,1,2,2,1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐