论计算编程

jingavin0 2011-08-15 02:19:18
刚刚看了个空酒瓶换酒的题目,我也来一个,大家试着做做看

一个牧场,买了一头一岁大的母牛,母牛3岁后,每年都能生一只母牛,现在编一段程序,计算该牧场20年后有多少头母牛
...全文
141 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutengfeigo 2011-08-15
  • 打赏
  • 举报
回复
没公牛,怎么搞出来的?
jernymy 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ulfsaar 的回复:]
C/C++ code


#include <stdio.h>

int f(int nY)
{
if (nY == 1)
{
return 1;
}
else if (nY == 2)
{
return 1;
}
else if (nY == 3)
{
……
[/Quote]

用递归,楼上已经实现了
bityoungs 2011-08-15
  • 打赏
  • 举报
回复
struct cow
{
int age;
struct cow * next;
};
int main()
{
int y ;
struct cow *ptr;
struct cow *ptr_new; //指向新出生的小牛
struct cow mother; //第一头牛
mother.age = 1;
mother.next = NULL;
int count = 0 ;// 记录牛的总头数
for(i=0;i<=20;i++) //年份循环
{
//第一头牛长一岁
mother.age ++ ;
//接下来看看后面的牛够不够下牛了啊!
ptr = mother.next ;

while(ptr != NULL)
{
ptr->age ++; //过了一年,当然要给它长一岁。
if(age <3) //可惜还没有成年
{
ptr = ptr->next; //看下一头吧
}
else
{ // 哈哈,成年了,可以下小牛了。
//每出生一头小牛,都把它排在第一头牛的后面,今年就避免给它长岁数
ptr_new = (struct cow *)malloc(sizeof(struct cow));
ptr_new->age = 0;
ptr_new->next = mother.next;
mother.next = ptr_new;
ptr_new = NULL;
}
}
//为了避免第一头牛生下来的小牛刚生下来就长一岁,
//所以最后再让它出生,上面的程序已经遍历完了,今年对它就没影响了。
if(mother.age >=3)
{
ptr_new = (struct cow *)malloc(sizeof(struct cow));
ptr_new->age = 0;
ptr_new->next = mother.next;//排在第一头你后面
mother.next = ptr_new;
ptr_new = NULL;
}
}

//话说二十年后,点名啦!

ptr = &mother;
while(ptr != NULL)
{
count ++;
ptr = ptr->next;
}

printf("the number of cow is %d\n",count);
return 1;
}

bityoungs 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yetming_huang 的回复:]

大哥你这个错了吧 8年怎么只有这么少呢引用 14 楼 bityoungs 的回复:
分析:
2年之后:2头
5年之后:4头
8年之后:8头
int generation = (year+1)/3; //总共繁衍多少代
int i ;
sum = 1;
for(i = 0; i< generation;i++);
sum *=2;

return sum;
[/Quote]

我看成 了三年才下头牛,囧。。。
yetming_huang 2011-08-15
  • 打赏
  • 举报
回复
懂了 谢谢[Quote=引用 16 楼 ulfsaar 的回复:]
每年的牛数 = 前一年的牛数 + 这年新出生的牛数
这年新出生的牛数 = 三年前的牛数 //因为牛要三岁后才能生育
所以:每年的牛数 = 前一年的牛数 + 三年前的牛数
即 f(n) = f(n-1) + f(n-3)

再看不懂我就无能为力了
[/Quote]
Ulfsaar 2011-08-15
  • 打赏
  • 举报
回复
每年的牛数 = 前一年的牛数 + 这年新出生的牛数
这年新出生的牛数 = 三年前的牛数 //因为牛要三岁后才能生育
所以:每年的牛数 = 前一年的牛数 + 三年前的牛数
即 f(n) = f(n-1) + f(n-3)

再看不懂我就无能为力了
yetming_huang 2011-08-15
  • 打赏
  • 举报
回复
大哥你这个错了吧 8年怎么只有这么少呢[Quote=引用 14 楼 bityoungs 的回复:]
分析:
2年之后:2头
5年之后:4头
8年之后:8头
int generation = (year+1)/3; //总共繁衍多少代
int i ;
sum = 1;
for(i = 0; i< generation;i++);
sum *=2;

return sum;
[/Quote]
bityoungs 2011-08-15
  • 打赏
  • 举报
回复
分析:
2年之后:2头
5年之后:4头
8年之后:8头
int generation = (year+1)/3; //总共繁衍多少代
int i ;
sum = 1;
for(i = 0; i< generation;i++);
sum *=2;

return sum;

yetming_huang 2011-08-15
  • 打赏
  • 举报
回复
还是不太清楚你说的什么 能详细点吗[Quote=引用 10 楼 ulfsaar 的回复:]
引用 9 楼 yetming_huang 的回复:
能说下思路吗?

引用 4 楼 ulfsaar 的回复:
C/C++ code

#include <stdio.h>

int f(int nY)
{
if (nY == 1)
{
return 1;
}
else if (nY == 2)
{
return 1;
}
else if (nY == 3)
{……
[/Quote]
Ulfsaar 2011-08-15
  • 打赏
  • 举报
回复
也可以来的直接点:
n-3年的牛是在n年可以生育牛,即第n年出生的牛市的数量,所以f(n) = f(n-1) + f(n-3)
modicum_lf 2011-08-15
  • 打赏
  • 举报
回复

个人不是很喜欢有些人,拿点小题目来论坛考人的!

Ulfsaar 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yetming_huang 的回复:]
能说下思路吗?

引用 4 楼 ulfsaar 的回复:
C/C++ code

#include <stdio.h>

int f(int nY)
{
if (nY == 1)
{
return 1;
}
else if (nY == 2)
{
return 1;
}
else if (nY == 3)
{
r……
[/Quote]

由于牛要3岁后才能生育,所以第n年的牛数 = (n-3年的牛数)*2 + n-2年出生的牛数 + n-1年出生的牛数
= f(n-3)*2 + (f(n-2) - f(n-3)) + (f(n-1) - f(n-2)) = f(n-3) + f(n-1)
yetming_huang 2011-08-15
  • 打赏
  • 举报
回复
能说下思路吗?[Quote=引用 4 楼 ulfsaar 的回复:]
C/C++ code

#include <stdio.h>

int f(int nY)
{
if (nY == 1)
{
return 1;
}
else if (nY == 2)
{
return 1;
}
else if (nY == 3)
{
r……
[/Quote]
wang0635 2011-08-15
  • 打赏
  • 举报
回复
跟兔子差不多啊
jingavin0 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 txzsp 的回复:]

能先问下,是否20年内母牛还能活着且仍有繁殖能力?
[/Quote]
其中母牛就当不死的好了,要不还要麻烦
txzsp 2011-08-15
  • 打赏
  • 举报
回复
能先问下,是否20年内母牛还能活着且仍有繁殖能力?
tianmo2010 2011-08-15
  • 打赏
  • 举报
回复
可以用递归的方法解决,代码LS的;也可以不用递归,可能稍微麻烦点
Ulfsaar 2011-08-15
  • 打赏
  • 举报
回复

#include <stdio.h>

int f(int nY)
{
if (nY == 1)
{
return 1;
}
else if (nY == 2)
{
return 1;
}
else if (nY == 3)
{
return 2;
}

return f(nY -3) + f(nY-1);
}

void main()
{
printf("%d\n", f(20));
}
jingavin0 2011-08-15
  • 打赏
  • 举报
回复
没人回答啊?
jingavin0 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yq_118 的回复:]

没有公牛

if(母牛死了)
0
else
1
[/Quote]
无聊人士请别进入
加载更多回复(1)

69,369

社区成员

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

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