对以下内容编程:设S=1+1/2+1/3+1/4+…+1/n,求与8最接近的S的值及与之对应的n值
时间: 2023-11-10 15:05:46 浏览: 83
根据提供的某数值,找出与其最接近的一组数据
# 方法一:暴力枚举
s = 0
n = 0
diff = float("inf") # 初始化差值为无穷大
for i in range(1, 10001): # 枚举n的范围为1到10000
s += 1/i
if abs(s-8) < diff: # 如果新计算的s与8的差值更小,则更新差值和对应的n值
diff = abs(s-8)
n = i
print("与8最接近的S的值为:", s)
print("对应的n值为:", n)
# 方法二:二分查找
def calculate_s(n): # 计算S的值
s = 0
for i in range(1, n+1):
s += 1/i
return s
left = 1
right = 10000
mid = (left+right) // 2 # 初始化二分查找的中间值为n=5000
while left <= right:
s = calculate_s(mid)
if s < 8: # 如果S小于8,则在右半部分继续查找
left = mid+1
elif s > 8: # 如果S大于8,则在左半部分继续查找
right = mid-1
else: # 如果S等于8,则直接输出结果
print("与8最接近的S的值为:", s)
print("对应的n值为:", mid)
break
mid = (left+right) // 2 # 更新中间值
# 如果跳出循环,说明S的值与8最接近的n已经确定了,需要再计算一次S的值
s1 = calculate_s(mid)
s2 = calculate_s(mid+1)
if abs(s1-8) < abs(s2-8):
print("与8最接近的S的值为:", s1)
print("对应的n值为:", mid)
else:
print("与8最接近的S的值为:", s2)
print("对应的n值为:", mid+1)
阅读全文