求一道编程题做法 100
R006E有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,自己变成一对大老鼠,上周的小老鼠变成了大老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老...
R006E 有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,自己变成一对大老鼠,上周的小老鼠变成了大老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老鼠?
展开
3个回答
展开全部
你的问题描述的不是很清楚,我理解是这样:小老鼠从出生到性成熟要一周的时间,并且每当性成熟就会生出一对小老鼠。也就是设一对小老鼠A,一周后生出一对小老鼠B,再一周后A又生出一对小老鼠C同时B也长成了大老鼠。此时共三对老鼠。
这样的问题主要是要把算法理清楚,也就是在数学上求解再翻译成程序语言即可,假设在第i-1(i>2)周有a[i-1]只老鼠,那么这些老鼠除了那些在第i周刚出生的老鼠外(也就是a[i-2]),在第i周都会生出小老鼠,所以a[i]=a[i-1]+a[i-2]。.
上面是得到了递推式,当然还要搞清初始条件,在本题中初始条件是:a[1]=1,a[2]=3。
现在可以编程了,以C语言为例:
#include <stdio.h>
#include<stdlib.h>
//计算n周后老鼠对数的函数
long mouse(int n)
{
int i;
long *a=(long *)malloc((n+1)*sizeof(long));
a[1]=1;
a[2]=3;
for(i=3;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
//测试函数
void main()
{
int test=0;
long result=0;
printf("输入周数N");
scanf("%d",&test);
result=mouse(test);
printf("老鼠总数为:%ld",result);
getchar();
getchar();
}
希望您学习顺利!
这样的问题主要是要把算法理清楚,也就是在数学上求解再翻译成程序语言即可,假设在第i-1(i>2)周有a[i-1]只老鼠,那么这些老鼠除了那些在第i周刚出生的老鼠外(也就是a[i-2]),在第i周都会生出小老鼠,所以a[i]=a[i-1]+a[i-2]。.
上面是得到了递推式,当然还要搞清初始条件,在本题中初始条件是:a[1]=1,a[2]=3。
现在可以编程了,以C语言为例:
#include <stdio.h>
#include<stdlib.h>
//计算n周后老鼠对数的函数
long mouse(int n)
{
int i;
long *a=(long *)malloc((n+1)*sizeof(long));
a[1]=1;
a[2]=3;
for(i=3;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
//测试函数
void main()
{
int test=0;
long result=0;
printf("输入周数N");
scanf("%d",&test);
result=mouse(test);
printf("老鼠总数为:%ld",result);
getchar();
getchar();
}
希望您学习顺利!
追问
http://zhidao.baidu.com/question/426583163.html?quesup2&oldq=1#replyask-54068438 呵呵 这也是我得一道题目 能做出的话 分也给你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
规律:1 1 2 3 5 8……
clear
a=1
b=1
input "请输入周数" to n
for i=3 to n
c=a+b
a=b
b=c
endfor
?c
clear
a=1
b=1
input "请输入周数" to n
for i=3 to n
c=a+b
a=b
b=c
endfor
?c
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要用什么语言编程?
matlab~java~C~C++~
选一个~:)
matlab~java~C~C++~
选一个~:)
更多追问追答
追问
c++
追答
首先这个题有问题,你再读一下题目,因为那个三对老鼠不对,数一下可以看出来只有两对老鼠。
如果硬要3对的话,可能是每周大老鼠能生两对小老鼠才行
int main(int argc, char* argv[])
{
int z[3] = {1,0,0};
int z2[3] = {0,0,0};
int n = 3;//3周之后
int i=0,j=0;
for(;i<n;i++){
for(j=0;j<4;j++){
z2[j]=z[j];
}
z[0]=z2[2]*2;//生下来的2对小老鼠
z[1]=z2[0]+z[2];//原来的小老鼠长成大老鼠,生产后的也变大老鼠
z[2]=z2[1];//大老鼠怀孕
}
int sum = z[0]+z[1]+z[2];
printf("sum %d!\n",sum);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询