浙大PTA 第2章-5 求奇数分之一序列前N项和 (15 分)

本文详细解析了如何使用Python编写程序解决经典问题,即计算序列1/1、1/3、1/5...的前N项和,提供了输入输出样例和关键代码段,确保计算结果的精度和范围限制。

全题解析链接

浙大Python题目集 PTA95题全部解析


本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

23

输出样例:

sum = 2.549541

题解: 

N = int(input())
sum = 0
for i in range(1,N+1):
    sum = sum + 1/(2*i-1)
print(f'sum = {sum:.6f}')

以下是几种使用 C 语言编写的计算奇数分之一序列 N 的程序示例: 示例一: ```c #include <stdio.h> int main() { int n; double sum = 0; scanf("%d", &n); for (int x = 1; x <= 2 * n - 1; x += 2) { sum += 1.0 / x; } printf("sum = %.6lf", sum); return 0; } ``` 该程序定义 `int` 类型的变量 `n` 存放所数,定义 `double` 类型的变量 `sum` 并初始化为 0 用于存储 N 。定义 `int` 类型的变量 `x` 作为母并初始化为 1,由于 `x` 为奇数,每次循环后加 2 寻找第 n 母。通过循环改变母并使 `sum` 自加,达到目的,最后按要输出结果[^1]。 示例二: ```c #include <stdio.h> int main() { int n,i; double sum=0; scanf("%d",&n); for(i=1;i<=n;i++){ sum+=1/(2*i-1.000000); } printf("sum = %.6f",sum); return 0; } ``` 此程序通过 `for` 循环,根据公式 `2 * i - 1` 计算每一母,累加每一的值到 `sum` 中,最后输出结果,精确到小数点后 6 位[^2]。 示例三: ```c #include<stdio.h> int main() { int n; scanf("%d",&n); int i = 0; double sum = 0; for(i = 1;i<=(n+n-1);i++) { sum+=(1.0/i); i++; } printf("sum = %.6lf",sum); return 0; } ``` 该程序同样实现了计算奇数分之一序列 N 的功能,通过 `for` 循环相应的计算逻辑,最后输出结果[^3]。 示例四: ```c #include <stdio.h> int main(void) { int i,N; double sum; scanf("%d",&N); for(i=1;i<=N;i++){ sum = sum + 1.0 / (2*i-1); } printf("sum = %.6f",sum); return 0; } ``` 此程序在 `for` 循环中,每次计算当的值并累加到 `sum` 中,最后按格式输出结果,计算时使用 `1.0` 避免了整数除法向下取整的问题[^4]。 示例五: ```c #include<stdio.h> int main() { int i, N; double sum = 0; scanf("%d", &N); for (i = 1; i<= 2 * N - 1; i+=2) { sum = sum + 1.0 / i; } printf("sum = %.6lf", sum); return 0; } ``` 该程序使用 `for` 循环,让 `i` 从 1 开始,每次增加 2,计算每一的值并累加到 `sum` 中,最后输出结果,符合题目要[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值