搜狐集团2018秋季校招笔试题 kolakoski序列

来源:互联网 发布:淘宝页面怎么装修 编辑:程序博客网 时间:2024/04/28 16:31

这里写图片描述这里写图片描述这里写图片描述

python实现代码:

#code:utf-8import sysif __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]的值