题目描述
给定一个正整数n,计算1+1/3+1/5….的前n项之和。
输入要求
输入一个正整数n(n<100)
输出要求
输出前n项之和,保留2位小数。
输入样例
5
输出样例
1.79
思路:可转化为数学学过的数列,寻找分母的规律为2*n-1
解析:
1.方法一(用while循环)
#include<stdio.h>
#include<math.h>
int main()
{
int n,i=1;
double a,s=0;
scanf("%d",&n);
while(i<=(2*n-1)) //i表示每一项的分母,因为是在循环中递增,所以是小于等于2*n-1,到分母i=2*n-1时,循环结束这一步后停止,因为i大于2*n-1时,括号里为假,跳出循环
{
a=1.0/i; //a表示数列第几项的值
s+=a; //对应a是第几项的值,s表示前几项的和(初始赋值为0
i=i+2; //根据数学数列推导出的分母递增规律(这一步也可以写成i+=2)
}
printf("%.2f\n",s); //保留两位小数输出
return 0;
}
(math头文件应该加不加都行
2.方法二(用for循环)
#include<stdio.h>
int main(){
int n,i;
double s=0;
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)//i表示数列每一项的分母
{
if(i%2!=0) //当i除以2取余不等于0时(这一步是为了寻找符合题意的分母)
s+=1.0/i;//相加求和
}
printf("%.2f\n",s);
return 0;
}
for循环没有多用一个字符a表示每一项的值,这一个字符有没有都行
(所以说白了,突然感觉好简单,就是这东西就是先把每个数对照着数学运算表示出来
(等等这个题好像也可以用递归,但是相对麻烦感觉,不过还是不要用递归了,,
类比推理,
如果是分母递减的数列,计算1/(2*n-1)+1/[2*(n-1)-1]+...+1/5+1/3+1的和
等等,这样的话其实还是把上面的倒过来了啊,颠倒了个个
参考代码:
1.方法一
#include<stdio.h>
#include<math.h>
int main()
{
int n,i=1;
double a,s=0;
scanf("%d",&n);
while(i<=(2*n-1))
{
a=1.0/i;
s+=a;
i=i+2;
}
printf("%.2f\n",s);
return 0;
}
2.方法二
#include<stdio.h>
int main(){
int n,i;
double s=0;
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)
{
if(i%2!=0)
s+=1.0/i;
}
printf("%.2f\n",s);
return 0;
}
(如有错误请在评论区指出