求解一道编程题

wuhen781 2011-03-28 09:05:11
编程:有一分数序列 求序列的前20项之和。

2/1+3/2+5/3+8/5+13/8+21/13……

比较简单地一道题,用c语言编程,要求把代码和答案都发上来,先到先得。
...全文
333 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang_dlut 2011-03-29
  • 打赏
  • 举报
回复
#include <stdio.h>
int main(int argc, int** argv)
{
double a=1.0,b=2.0,sum;
int i=0;
int count;
sscanf((int *)argv[1], "%d", &count);
while(i<count)
{
sum+=b/a;
double temp=b;
b=a+b;
a=temp;
i++;
}
printf("sum is %f.\n",sum);
return 0;
}
heartgoon2010 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hnuqinhuan 的回复:]
C/C++ code

#include <stdio.h>

int main()
{
double a = 2.0,b = 1.0;
double sum = 0.0;
int i = 0;
while( i < 20 )
{
sum += a / b;
double temp = b;
……
[/Quote]
up
sunlp007 2011-03-29
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
int main()
{
float a = 1.0,b = 2.0,sum = 0.0,t;
for (int i=0;i<20;++i)
{
sum += b / a;
t = a;
a = b;
b = t + a;
}
cout << sum <<endl;
}

最后结果32.6603
masmaster 2011-03-29
  • 打赏
  • 举报
回复

root@~ #cat fb.c
#include <stdio.h>

int main (void) {

int x,y,i;
int fb (int n);
float sum=0;

for(i=1;i<21;i++) {
x=fb(i+3);
y=fb(i+2);
sum+=(float)x/y;
printf ("%i/%i=%f\n",x,y,sum);
}
printf ("sum is %f\n",sum);
return 0;

}
int fb (int n) {
int i,result=0;
if(n==0) { return result=0; }
if(n==1) { return result=1; }
return result=fb(n-1)+fb(n-2);
}

root@~ #./fb
3/2=1.500000
5/3=3.166667
8/5=4.766667
13/8=6.391667
21/13=8.007051
34/21=9.626099
55/34=11.243746
89/55=12.861928
144/89=14.479905
233/144=16.097961
377/233=17.715986
610/377=19.334023
987/610=20.952055
1597/987=22.570089
2584/1597=24.188124
4181/2584=25.806158
6765/4181=27.424192
10946/6765=29.042227
17711/10946=30.660261
28657/17711=32.278294
sum is 32.278294
root@~ #
愤怒的熊猫007 2011-03-29
  • 打赏
  • 举报
回复


#include <stdio.h>
void main()
{
double a = 2.0;
double b = 1.0;
double sum = 0;
for(int i = 0; i < 20; i++)
{
sum += (double)a/b;
double temp = a;
a = a + b;
b = temp;//改下就对了~~我晕
}
printf("%f",sum);……
pcliuguangtao 2011-03-28
  • 打赏
  • 举报
回复
#include <stdio.h>
int f( int n )
{
if( n<=0 )
return 0;
if( n==1 )
return 1;
if( n==2 )
return 2;
return f(n-1)+f( n-2 );

}
int main( )
{
float sum=0.0;
float b=2.0;
int tem;
for( tem=1;tem<21;tem++ )
{
sum=sum+b / f(tem);
b=b+f( tem );
}
printf( "%f\n",sum ) ;
return 0;

}

给出一个使用递归的解法,不过最好不要用,效率较低。其实这个例子的关键就是找到a/b+c/d,里面a,b,c之间的关系。找到了以后怎样做都行
ls251544415 2011-03-28
  • 打赏
  • 举报
回复

#include <stdio.h>
void main()
{
double a=1.0, b=2.0, sum=0;
int c=20;
while(c-- != 0)
{
sum += b/a;
b = b+a;
a = b-a;
}
printf("Result is %f",sum);
}
pcliuguangtao 2011-03-28
  • 打赏
  • 举报
回复
#include"stdio.h"
void main()
{
int a0=1,a1=2;
int b0=0,b1=1;
int i,t1,t2;
float sum=0;
for (i=0;i<20;i++)
{
sum+=(float)a1/b1; //进行类型转换就对了

printf("sum is %f|a%d=%d/b%d=%d\n",sum,i,a1,i,b1);
t1=a1+b1;
a1=t1;
t2=a1-b1;
b1=t2;
}
printf("和为%f",sum);
}

结果为:32.660263 近似值。
另外6楼的解发相当漂亮,支持一下
dcw0402 2011-03-28
  • 打赏
  • 举报
回复
分子为2,3,5,8,13.......A1=2,A2=3,A(n+2)=An+A(n+1)
分母为1,2,3,5,8,.......B1=1,B2=2,B(n+2)=Bn+B(n+1)
分式为C1=2/1,C2=3/2,C(n+2)=A(n+2)/B(n+1)
这个数列的各项的分子,分母都是斐波那契数列,简介如下:
1 1 2 3 5 8 13 21 34
以上是著名的裴波那契数列。其特点为 某一项 = 它的前2项之和。
其通项公式为
Fn = {[(1+√5)/2]^n-[(1-√5)/2]^n}/√5
证:
F(n+1)=Fn+F(n-1)(n≥2)

两边加kFn
Fn+1+kFn=(k+1)Fn+Fn-1
当k!=1时
Fn+1+kFn=(k+1)(Fn+1/(k+1)Fn-1)


Yn=Fn+1+kFn

当k=1/k+1,且F1=F2=1时
因为
Fn+1+kFn=1/k(Fn+kFn-1)
=>
Yn=1/kYn-1
所以
Yn为q=1/k=1(1/k+1)=k+1的等比数列

那么当F1=F2=1时
Y1=F2+kF1=1+k*1=k+1=q
根据等比数列的通项公式
Yn=Y1q^(n-1)=q^n=(k+1)^n
因为k=1/k+1=>k^2+k-1=0
解为 k1=(-1+sqrt(5))/2
k2=(-1-sqrt(5))/2
将k1,k2代入
Yn=(k+1)^n
,和Yn=Fn+1+kFn
得到
Fn+1+(-1+sqrt(5))/2Fn=((1+sqrt(5))/2)^2
Fn+1+(-1+sqrt(5))/2Fn=((1-sqrt(5))/2)^2
两式相减得
sqrt(5)Fn=((1+sqrt(5))/2)^2-((1-sqrt(5))/2)^2

Fn=(((1+sqrt(5))/2)^2-((1-sqrt(5))/2)^2)/sqrt(5)
無_1024 2011-03-28
  • 打赏
  • 举报
回复

#include <stdio.h>

int main()
{
double a = 2.0,b = 1.0;
double sum = 0.0;
int i = 0;
while( i < 20 )
{
sum += a / b;
double temp = b;
b = a;
a = a + temp;
i++;
}
printf("sum = %lf\n",sum);
return 0;
}
wuhen781 2011-03-28
  • 打赏
  • 举报
回复
2楼结果21.000
3楼结果41.000
似乎都不对。
guanghuiy 2011-03-28
  • 打赏
  • 举报
回复
2楼 程序需要调整一下就ok了
guanghuiy 2011-03-28
  • 打赏
  • 举报
回复
3楼:程序需要调整一下

//2/1+3/2+5/3+8/5+13/8+21/13……
//a/b=2/1

//a=a+b;
//b=a-b;

#include"stdio.h"
void main()
{
int a0=1,a1=2;
int b0=0,b1=1;
int i,t1,t2;
float sum=0;
for (i=0;i<20;i++)
{
sum+=a1/b1;

printf("sum is %f|a%d=%d/b%d=%d\n",sum,i,a1,i,b1);
t1=a1+b1;
a1=t1;
t2=a1-b1;
b1=t2;
}
printf("和为%f",sum);
}

这样结果就对了 结果为21
mjaiyun 2011-03-28
  • 打赏
  • 举报
回复
#include"stdio.h"
void main()
{
int a0=1,a1=2;
int b0=0,b1=1;
int i,t1,t2;
float sum=0;
for (i=0;i<20;i++)
{
sum+=a1/b1;
t1=a1;
a1+=a0;
a0=t1;
t2=b1;
b1+=b0;
b0=t2;
}
printf("和为%f",sum);
};
愤怒的熊猫007 2011-03-28
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
double a = 2.0;
double b = 1.0;
double sum = 0;
for(int i = 0; i < 20; i++)
{
sum += (double)a/b;
double temp = a;
a = a + b;
b = a;
}
printf("%f",sum);
}
结果21.000

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧