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]的值