python实现代码:
#code:utf-8
import sys
if __name__=="__main__":
inputVal=raw_input()
count=int(inputVal.split()[0]) #结果输出多少行数
n=int(inputVal.split()[1])
myList=list(map(int,raw_input().split()))#存放n个值
resList=[]#存放kolakoski序列
sumLen=1
k=1
#第一次肯定是myList[0]个myList[0]的值
index=myList[0]
for i in xrange(index):
resList.append(myList[0])
while(k<count):
index=resList[k]
for i in xrange(index):
resList.append(myList[sumLen])
sumLen=sumLen+1
k=k+1
if(sumLen%n==0): #myList长度为n
sumLen=0
#print ("len:%d" %(len(resList)))
for x in xrange(count):
print (resList[x])
结果如图:
解题思路:
kolakoski序列有如下规律:
1、如输入3 1 4 1
2、kolakoski序列为333111444131444411113333141….
2.1、 首先kolakoski的第一个值肯定是3,即resList[0]=myList[0]
2.2、 第一趟:resList需加入3个myList[0]
2.3 、然后查找resList[1],需要加入resList[1]个myList[1]的值到resList
2.4、 然后查找resList[2],需要加入resList[2]个myList[2]的值到resList
2.5、最后查找resList[i],需要加入resList[i]个myList[i%4] (因为myList最大长度为4,每次循环完后,从0开始又循环)的值到resList
2.6、最后输出resList[0]到resList[count-1]的值