老鼠繁殖问题
题目描述:有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,三周后,上周出生的小老鼠变成了大老鼠,而原来的大老鼠又生出了一对小老鼠之后便死亡了,四周后,第一对出生的小老鼠(此时已经是大老鼠)又生出了一对小老鼠,此时共有三对老鼠。试编制程序,计算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;
}