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('正常情况下不会出现此提示:输入错误或者算法有误')