老鼠繁殖问题

老鼠繁殖问题
题目描述:有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,三周后,上周出生的小老鼠变成了大老鼠,而原来的大老鼠又生出了一对小老鼠之后便死亡了,四周后,第一对出生的小老鼠(此时已经是大老鼠)又生出了一对小老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老鼠?
基本要求:(1)编程实现,要求N的取值可以随意变换;
(2)实物演示时要求讲出程序原理;
提高要求:(1)能够采用一些形式动态描述老鼠出生和长大这一过程;
(2)考虑采用性能好的算法。
设计提示:老鼠的数量肯定是一个不断增长的过程,关键是找出该过程的规律,可以考虑采用递归的思想来实现该程序。考虑到数据溢出,转换为字符串处理,能力有限,望大神帮忙!
#include <stdio.h>
void fx(char *x,int n)
{
char *p1=x,*p2=x+n;
char t;
while(p1<p2)
{
t=*p1;
*p1=*p2;
*p2=t;
p1++;
p2++;}
}
char plus(a[],b[])
{
char a[],b[];
int c[],d[];e[]={0};
int len1,len2,len3;
int i,n=100;
len1=strlen(a);
fx(a,len1);
len2=strlen(b);
fx(b,l2);
for(i=0;i<len1;i++)
c[i]=a[i]-'0';
for(i=0;i<len2;i++)
d[i]=b[i]-'0';
len3=len1>len2?len1:len2;
e[0]=c[0]+d[0];
for(i=1;i<len3;i++)
{
e[i]=c[i]+d[i]+e[i-1]/10;
e[i-1]%=10;
}
e[i+1]=e[i]/10;
e[i]%=10;
while(!e[n])
n--;
return e[];
}

char mouse(int n)
{
int m[],n[],p[];
char a[],b[],c[],temp1,temp2,mouse;
for (i=0;i<n;i++)
{
temp1=a[1];
temp2=a[2];
a[1]=a[0];
a[2]=temp1;
a[0]=plus(a[],b[]);
}
return (mouse);
}

int main()
{
int n;
printf("请输周数n:");
scanf("%d",&n);
if(n>=1)
printf("老鼠的数目是:")
puts(mouse(n));
else
printf("输入错误!请重新输入!\n");

return 0;
}

创建一个老鼠类,该类有生育,成长,死亡3种方法,年龄1种属性,由这题可看到一对老鼠的一生是第3周5周生育一对小鼠,6周死亡,首先初始化老鼠类的一个对象实例,每过一周,所有存在的对象执行一次成长方法,在成长方法中,年龄+1,如果年龄是3或者5,调用该对象生育方法粗初始化一个新的老鼠对象,最后判断如果年龄是6,则卸载该对象,经过一定的周数,对象实例的个数既是老鼠的对数。
#include <iostream>
using namespace std;
int mouse(int n)
{
int a[3]={1,0,0},i,temp1,temp2;
for (i=0;i<n;++i)
{
temp1=a[1];
temp2=a[2];
a[1]=a[0];
a[2]=temp1;
a[0]=temp1+temp2;
}
return (a[0]+a[1]+a[2]);
}

int main()
{
int n;
scanf("%d",&n);

printf("%d",mouse(n));

return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答