有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,···求出这个数列的前20项和。
看到分数,变量类型要用浮点型,格式化输出也要用相对应的输出符号
首先,找出这串数字的规律
1 2 3 5 8 13 21···
将数字这样展开并去掉重复的数字之后,很容易可以看出,从第三项开始,当前项等于前两项之和(和斐波那契数列有点像,所以借用斐波那契数列的思路)。
(以前3个数字1,2,3为例)
(1)计算当前分数<2/1>的值
(2)将当前数字<3>的前一个<2>的前一个数字<1>先存放在tmp<tmp=1>中
(3)将当前数字<3>的前一个<2>赋值给下一个分数<3/2>的分子< i >
(4)然后将前两个数字<1>、<2>的和<3>赋值给下一个分数< 3/2 >的分母< j >
(5)计算前n项的和
将以上内容放在一个循环中,循环20次,也就是计算出前20项的和。
#include<stdio.h>
int main(){
double i = 1.0, j = 2.0;
int count = 0;
double sum = 0;
while (count < 20){
double ret = j / i;//保存当前项的结果
double tmp = i;
i = j;
j = tmp + j;
sum += ret;//前n项的累加和
count++;
}
printf("sum=%lf", sum);
return 0;
}
软件工程唐神: 除法有问题
Civilization.: 我觉得第十次反弹应该只有下落的那一半吧,应该最后再减去第十次弹起来的高度吧
莫难为我旺仔: 对啊 所以循环结束后需要在进行一次h/2 这才是第十次回弹的
仇仇仇仇仇子: 不行,无法运行,我的系统显示“无效文件”
好不快活呀~: 你这有问题,测试里边div和sub的位置写反了