python计算最小自然数N,让从1到N的所有正整数之和大于S(运用while循环,N和S都是变量),并且打印结果。

写出代码,计算最小自然数N,让从1到N的所有正整数之和大于S(运用while循环,N和S都是变量),并且打印结果。 例如,如果S=10, 那么 N=5 (1+2+3+4+5=15>10); 如果S=100, 那么N=14(1+2+3+。。。+14=105>100)

阅读 1.9k
2 个回答
def calc (S: int):
    sum = 0
    N = 0
    while S >= sum:
        N += 1
        sum += N
    print(N)

calc(10)
calc(100)
import math
s = int(input("plz input integer s: "))
val = int(math.sqrt(s*2))
print(val+ (0 if val*(val+1) > 2 * s else 1))

原理在于假设存在使得
1+...+n=n*(n+1)/2=S
本题结果为res,应有res = n + 1
而有n<sqrt(2*S)n1 = int(sqrt(2*S)) 定有n >= n1
考虑到此时可能有n1*(n1+1)=2*S(此时n=n1),故作判断,在特定时刻令res = n1+1 = n+1,否则res = n1 = n+1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏