- '''
- 一个由n个数字构成的环,每次变化后,每个数字会变成自己和后面一个数的和
- 最后一个数的后面是第一个数。
- 当数字大于100时,取模。
- 给出这个手环开始的n个数字,循环次数k,循环后的数值。
- 要求 2<=n<=50, 1<=k<=20000000;
- 注意,一定使得运算可以满足以上n,k的要求
- (所以,不要认为一个小数字你可以算出来,大数字就一定能算的出来,尽量让计算在有限的时间内完成)。
- '''
- import time
- import random
- def gameX(n,k):
- #初始化n个数字的环(列表)
- listx=[]
- for i in range(n):
- listx.append(random.randint(1,100))
- #创建一个相应移位的环(列表)
- listy=listx[1:]+[listx[0]]
- print("初始列表为:"+str(listx))
- print("跟随列表为:"+str(listy))
- for i in range(k):
- for j in range(len(listx)):
- listx[j]=listx[j]+listy[j]
- if listx[j]>=100:
- listx[j]=listx[j]%100
- listy=listx[1:]+[listx[0]]
- return listx
- if __name__=='__main__':
- n=int(input("输入数字的数量(n):\n"))
- k=int(input("输入要循环的次数(k):\n"))
- start=time.time()
- print(gameX(n,k))
- end=time.time()
- print("程序运行了%d秒。" %(end-start))
-
-
复制代码
- 输入数字的数量(n):
- 50
- 输入要循环的次数(k):
- 20000000
- 初始列表为:[35, 83, 1, 78, 26, 97, 84, 52, 23, 46, 96, 19, 81, 73, 68, 51, 52, 5, 68, 4, 40, 71, 99, 33, 6, 27, 43, 24, 41, 62, 64, 21, 32, 56, 81, 31, 4, 39, 23, 90, 11, 48, 1, 36, 98, 14, 83, 68, 75, 73]
- 跟随列表为:[83, 1, 78, 26, 97, 84, 52, 23, 46, 96, 19, 81, 73, 68, 51, 52, 5, 68, 4, 40, 71, 99, 33, 6, 27, 43, 24, 41, 62, 64, 21, 32, 56, 81, 31, 4, 39, 23, 90, 11, 48, 1, 36, 98, 14, 83, 68, 75, 73, 35]
- [6, 88, 0, 47, 44, 18, 40, 67, 77, 1, 26, 49, 85, 73, 29, 6, 25, 53, 2, 76, 2, 52, 46, 4, 77, 31, 88, 25, 22, 69, 18, 65, 17, 27, 76, 76, 24, 85, 23, 4, 81, 50, 28, 52, 76, 2, 27, 96, 29, 52]
- 程序运行了259秒。
复制代码 |