一道有趣的编程题,不知道对不对

milkslzz 2005-05-11 10:06:24
题目是我在别的论坛上找的,因为没有标准答案,不知道对不对?请高手们指出问题

/*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的
兔子总数为多少?
这个题目相信大家都不会陌生了,那如果每个免子只能活10个月呢?
*/

# include <iostream.h>
//# include <windows.h>



void rabbit(int lifemonth,int month)
{
static int num=1; //设立静态变量,统计兔子个数


for(int x=0; x<lifemonth; x++) //循环10个月,看能生多少对
{
if(x>month) //判断是否超过月数
break;
if(x>2) //第3个月开始生
{
num+=2;
rabbit(lifemonth,month-x); //一只生一对,故调用2次
rabbit(lifemonth,month-x);
}
}

// system("cls");

cout << "after " << month << " month,"
<< "the total num of the rabbit is: " << num << endl;
}

void main()
{
int lifemonth=10; //兔子可以存活10个月
int month; //计算多少个月后兔子多少
cout << "please input the month" << endl;
cin >> month;


rabbit(lifemonth,month);

}
...全文
559 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
milkslzz 2005-05-16
  • 打赏
  • 举报
回复
晕哦,能不能写点注释阿,这样别人看的好辛苦哦

要知道注释也是程序的一部分哦~~
milkslzz 2005-05-16
  • 打赏
  • 举报
回复
兔子不分男女,都用clong好了。这样就没有性别歧视了。。。。

clong生殖,忽略男女因素。这样3个月后兔子开始克隆。。。。。

在不行男的搞玻璃生产好了 。。。。。。。。。。
女的也搞。。。 +_+~~
milkslzz 2005-05-16
  • 打赏
  • 举报
回复
回复人: hell_wolf(浪花) ( ) 信誉:100 2005-05-16 15:19:00 得分: 0


成年兔子每月都会生一对,但怎么全是3 6 9...,难道4,5,7,8...月没兔子吗?

---------------------------------------
我是楼主,我写的程序没这个问题哦? 我写的那个都每个月都有生的,而且成年兔子只能活10个月。到11个月后那只兔子死亡,兔子总数num减少一个
hell_wolf 2005-05-16
  • 打赏
  • 举报
回复
成年兔子每月都会生一对,但怎么全是3 6 9...,难道4,5,7,8...月没兔子吗?
FromNoWhere 2005-05-16
  • 打赏
  • 举报
回复
题目描述:

若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?

自己写的:
/**********************************/
a[] 保存每年的新生母牛数目
a[n]= a[1]+ a[2] + a[3] +....+a[n-3]
最后将前n年母牛数目加起来就得到了n年母牛的总数目
/*********************************/
int _tmain(int argc, _TCHAR* argv[])
{

int year=1, total=0;
memset(a, sizeof(a), 0);
a[1]=1;
cout<<"intput the year:"<<endl;
cin>>year;
a[4]=1;
for(int i=5; i<=year; ++i)
{
for(int j=1; j<=(i-4)+1; ++j)
{
a[i]+=a[j];
}
}
for(int i=1; i<=year; ++i)
{
total+=a[i];
}
cout<<"the total number is: "<<total<<endl;
return 0;
}

网上的:
1, 利用 f(n)= f(n-1) + f(n-3) 得到第n年的母牛数目
long num_cow(int n){
return (n < 4) ? 1 : num_cow(n-1) + num_cow(n-3);
}

或者:
for(i=3;i<100;i++)
f[i]=f[i-1]+f[i-3];

2,
利用STL的accumulate(累加)算法简化代码.

bool cow_number(vector<int>& vec,int number)
{
if(number>100||number<0)return false;
else{
for(int n=vec.size();n<number;n++)
vec.push_back(accumulate(vec.begin(),vec.end()-2,0));
return true;
}//end else
return true;
}//end cow_number(......

int main()
{
int a[]={1,0,0,1};
int flag=0;
vector<int> temp_vec(a,a+4);
cout<<"请输入年龄数"<<endl;

cin>>flag;
cow_number(temp_vec,flag);
cout<<"今年牛的中数是:";
cout<<accumulate(temp_vec.begin(),temp_vec.begin()+flag,0)<<endl;
system("pause");
return 0;
}//end int main()
Salam2001 2005-05-16
  • 打赏
  • 举报
回复
回复人:krh2001(边城浪子) ( 二级(初级)) 信誉:100 2005-05-16 13:53:00 得分:0
?
请问每只兔子都是母的吗? 没有公的母的怎么会怀孕?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

人工授精嘛,都什么年代了都,不用兔爸爸费心了 ...
yangjundeng 2005-05-16
  • 打赏
  • 举报
回复
全是近亲繁殖!!!汗
jerry 2005-05-16
  • 打赏
  • 举报
回复
请问每只兔子都是母的吗? 没有公的母的怎么会怀孕?
awperpvip 2005-05-16
  • 打赏
  • 举报
回复
有意思了
zhongwei5695 2005-05-15
  • 打赏
  • 举报
回复
只有两只兔子.........兔子要绝种了.....嘎嘎
哭哦..........以后没有兔子肉吃了..........
sway2003009 2005-05-15
  • 打赏
  • 举报
回复
我的答案,大家分析一下看。^_^
// rabbit_problem.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>

const int LIFE = 10;

int rabit(int month)
{
int n = month/3;
int num = 1;
bool flag = false;
for( int i =0; i < n; i++)
{
if((i+1)*3 >= 10)
{
flag =true;
num = num -1;
}
num = 3*num;
}
if(!flag)
return (num +1);
else
return num;
}
int main(int argc, char* argv[])
{
int month;
cout <<"请输入月份数目:";
cin >> month;
int number;
number = rabit(12);
for(int i =1; i<=month; i++)
{
number = rabit(i);
cout <<"第" << i << "个月的兔子数为:\t" << number <<"只" <<endl;
}
return 0;
}
BabySky716 2005-05-12
  • 打赏
  • 举报
回复
兔子有没有雌雄啊?是不是每个兔子都能生。。。。
jpq1982 2005-05-12
  • 打赏
  • 举报
回复
the 0 month <-----> rabbit count: 1
the 3 month <-----> rabbit count: 1
the 6 month <-----> rabbit count: 2
the 9 month <-----> rabbit count: 3
the 12 month <-----> rabbit count: 5

is it right??:)
withc 2005-05-12
  • 打赏
  • 举报
回复
都出现色情成分!!!!!!
milkslzz 2005-05-12
  • 打赏
  • 举报
回复
兔子不管是雌雄,都能生好了。
是雄的让他自交好了。。。。。。^_^
milkslzz 2005-05-12
  • 打赏
  • 举报
回复
the 0 month <-----> rabbit count: 1
the 3 month <-----> rabbit count: 1
the 6 month <-----> rabbit count: 2
the 9 month <-----> rabbit count: 3
the 12 month <-----> rabbit count: 5

这样肯定错啦,注意看清楚题目呀~~
要是acm的题这样审题那不就忘了。。。。
sungengyu 2005-05-11
  • 打赏
  • 举报
回复
这个用循环就可以了,没必要用递归。
milkslzz 2005-05-11
  • 打赏
  • 举报
回复
一对兔子才生4 只阿
我用递归递归2次没错阿
milkslzz 2005-05-11
  • 打赏
  • 举报
回复
修改了一下,这下应该没问题了。。

/*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的
兔子总数为多少?
这个题目相信大家都不会陌生了,那如果每个免子只能活10个月呢?
*/

# include <iostream.h>
static int rabbit_num=1; //设立静态变量,统计兔子个数
int rabbit(int lifemonth,int month)
{

int null;

for(int x=0; x<lifemonth; x++) //循环10个月,看能生多少对
{
if(x>month) //判断是否超过月数
break;
if(x>2) //第3个月开始生
{
rabbit_num+=2;
null=rabbit(lifemonth,month-x); //一只生一对,故调用2次
null=rabbit(lifemonth,month-x);
}
}
if(month>10) //增加了这个,兔子活了10个月就挂了
rabbit_num--;

return rabbit_num;
}

void main()
{
int lifemonth=10; //兔子可以存活10个月
int month; //计算多少个月后兔子多少
cout << "please input the month" << endl;
cin >> month;

int num;

for(int x=1; x<=month; x++)
{
num=rabbit(lifemonth,x);
rabbit_num=1; //循环计算n个月后重新初始化兔子个数
cout << "after " << x << " month,"
<< "the total num of the rabbit is: " << num << endl;
}
}

milkslzz 2005-05-11
  • 打赏
  • 举报
回复
你理解错了吧,那个兔子从出生开始的第3个月就开始生产了。。
输出应该是这样的:

the 0 month <-----> rabbit count: 1
the 3 month <-----> rabbit count: 3 //这里3个月后第一支兔子已经生了2只了
the 6 month <-----> rabbit count: 13 //这里还是第一支兔子生,还有3个月时候的一对兔 子又生了2支,一下子增加 2+2*2支兔子
…………


加载更多回复(12)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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