写出代码,计算最小自然数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)
写出代码,计算最小自然数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)
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
3 回答2.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
4 回答1.6k 阅读
3 回答1.4k 阅读
2 回答1.1k 阅读✓ 已解决