求牛的个数??

yjyita 2003-09-14 10:39:12
一头牛从它生下来的第四年开始生小牛,总N年后有多少头牛?
牛的个数
1,1,1,2,3,4,,5,7,10,14,19,26,36,……………………等等这样的增长,它是第一个数加第四个数,得第五个数。
请问你怎么写代码????
谢谢!!!
...全文
40 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
scpzhwang 2003-09-16
  • 打赏
  • 举报
回复
hylz0(斩左)
我觉得你写出代码来,算一下时间复杂度。就可以比较哪种比较快些。
goodluckyxl 2003-09-16
  • 打赏
  • 举报
回复
salaciouswolf(好好学习) ( ) 信誉:100

int T(int X)
{
if(X>=3)
{
T(X)=T(X-1)+T(X-3);
T(3)=1;
return();
}
else
return(1);
}
cnxiaohai 2003-09-16
  • 打赏
  • 举报
回复
不是Fibonacci数列

但和Fibonacci数列类似
julianyuan 2003-09-16
  • 打赏
  • 举报
回复
其实这个就是Fibonacci数列
F(1)=1
F(2)=2
F(n)=F(n-1)+F(n-2) (n>=3)
我是用C写的,程序可以这么写:

#include <stdio.h>
main()
{
long f0=1,f1=1;
int s=0,i,t,n;
t=f0+f1;
s=t+a1;
printf ("Bitte geben Sie die n ein:\n");
scanf ("%d",&n);
for (i=4;i<=n;i++)
{
s=s+t;
t=s-t;
}
printf("%d\n",s);
}

我也是刚学的,写的不好请各位指正
:)
dama2003 2003-09-16
  • 打赏
  • 举报
回复
int niu(int n)//递归函数
{
long i;
if(n<3) i=1;
else if(n==3) i=2;
else i=niu(n-1)+niu(n-4);
return i;
}
main()
{
int i;
long liu[40];
for(i=0;i<40;i++)
liu[i]=niu(i);
for(i=0;i<40;i++)
{
if(i%10==0)
cout<<endl;//每行打印十个数
cout<<liu[i]<<'\t';
}
cout<<endl;
}
(菜鸟)
slaker 2003-09-16
  • 打赏
  • 举报
回复
scpzhwang(快快乐乐) 的计算方法不错,值得学习...
buzhiming99 2003-09-16
  • 打赏
  • 举报
回复
请保存计算过的结果。
用空间换时间。
lieyanfriend 2003-09-16
  • 打赏
  • 举报
回复
补充:scpzhwang(快快乐乐) 是利用一个四个数的数组来存储即将相加的两个数。
这样的好处在于利用了有限的存储空间和简单的加法运算取代了占用资源过多的递归算法。
采用递归一般有两种形式:一种是利用公式:T(N)=T(N-1)+T(N-4)来做;
另一种是用递归分解来做,总的来说就是把N分解为已知的数据,这样已知的数据越多,算法也就越快。但是无论如何,用第一种方法最简便的。
lieyanfriend 2003-09-16
  • 打赏
  • 举报
回复
就我观察, scpzhwang(快快乐乐) 的代码是效率最高的。
用递归太慢,我用了两种递归的方法,当输入整数过大之后就不行了。
scpzhwang(快快乐乐) 的代码还应该再改进一下,采用int型数据太短,不能用于求70以后的整数(70以前的我也不确定,没有精确计算过)。采用double型数据可能要好一点。
jianshen77 2003-09-16
  • 打赏
  • 举报
回复
int T(int n)
{
if(n>3)
return (T(n-1)+T(n-4));
else
return 1;
}
binjuny 2003-09-16
  • 打赏
  • 举报
回复
#include <stdio.h>

int count=0;
int step=1;

int fun(int n){
int sum=0;
while(n){
sum+=step;
count++;
if ( count%4==0 )
step++;
n--;
}
return sum;
}

int main(){
int n;
printf("input n:");
scanf("%d",&n);
printf("result:%d\n",fun(n));
}
hylz0 2003-09-15
  • 打赏
  • 举报
回复
还是递归好
leefeng 2003-09-15
  • 打赏
  • 举报
回复
想快就用汇编写啊,也很简单嘛
scpzhwang 2003-09-15
  • 打赏
  • 举报
回复
salaciouswolf(好好学习)

用递归法写,速度可不太快呀.
你有写好的代码吗?让我看看行吗?
salaciouswolf 2003-09-15
  • 打赏
  • 举报
回复
用递归法写,很简单,给你一个公式:
T(N)= T(N-1)+T(N-3)
T(N)为N年的牛数!
scpzhwang 2003-09-15
  • 打赏
  • 举报
回复
我用VC++6.0写的,可能不是很好,但可以得出你要的结果。(写的不好,我也才学不久)

#include<iostream.h>
void main()
{
int n;
cout<<"请输入年限:";
cin>>n;
int sum[4]={1,1,1,2};
for(int i=0;(i<(n-1)/4);i++)
{
sum[0]=sum[0]+sum[3];
sum[1]=sum[1]+sum[0];
sum[2]=sum[2]+sum[1];
sum[3]=sum[3]+sum[2];
}
cout<<sum[(n-1)%4]<<endl;
}
TianGuangZao 2003-09-14
  • 打赏
  • 举报
回复
chinaunix.net 上讨论过,非常长的一个帖子。
http://chinaunix.net/forum/viewtopic.php?t=130156&sid=df86a378630fe80918bc47de15e5ebbb

69,335

社区成员

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

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