1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,...输入位置输出该位置上的数字,如输入10输出4,输入11输出5.

 

#1,2,3,3,3,4,4,4,4,5,5,5,5,5,6,...输入10输出4,输入11输出5.类似这种规律,设计算法。

#设m是我们想要得到的输出结果,那么在输出为m的数字之前有1+2+...+(m-1)个数字。由此可得到一个公式,1+2+...+(m-1) < N <= 1+2+...+m.整理可得:m*m-m < 2*N <= m*2+m.
#注意到:m*2-m >= m*2-2*m+1=(m-1)*2,  m*2+m < m*2+2m+1=(m+1)*2.由此可得:
#m-1 <= sqrt(2*N) < m+1. 从而:sqrt(2*N)-1 < m <= sqrt(2*N)+1.
#对sqrt(2*N)-1向上取整,则 m = ceil( sqrt(2*N)-1 )或int( sqrt(2*N)+1 )【也可以写为ceil( sqrt(2*N)-1 )+1即m+1】.

#导入模块
import math

#获取整数输入
N = int(input('请输入一个正整数N:'))

#计算2N的平方根并实现一次向上取整
tep = (2*N)**0.5
m = math.ceil(tep-1)

#结果判断
if m**2-m < 2*N <= m**2+m:
    print('结果是:', m)
elif (m+1)**2-(m+1) < 2*N <= (m+1)**2+(m+1):
    print('结果是:', m+1)
else:
    print('正常情况下不会出现此提示:输入错误或者算法有误')

 

posted @ 2017-09-13 12:24  君以沫  阅读(534)  评论(0编辑  收藏  举报