我必须创建一个程序,在以下无限序列中找到第n个元素:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1......
Run Code Online (Sandbox Code Playgroud)
所以在这里你可以看到'center'增加一个,'center'的副元素相互反映,所以我们可以将这个序列分成小组:
[1][121][12321][1234321].....
Run Code Online (Sandbox Code Playgroud)
所以任务是找到给定n的序列中的第n个元素.例如,我们将7作为输入并且必须返回3,因为序列中的第7个元素是3.这里的问题是当n超出10^15我的程序时显示运行时错误,而输入可以大到10^100000.这是我的代码:
n = int(input())
fin = n
number = long(1)
counter = long(0)
while n>0:
n = n - number
number = number+2
counter = counter + 1
mid = long((counter-1)*(2+2*(counter-1))/2+1)
place = long(counter - abs(mid-fin))
if fin==0:
print 0
else:
print place
Run Code Online (Sandbox Code Playgroud)