c语言兔子序列
『壹』 c语言程序设计 兔子
#include<stdio.h>
#include<stdlib.h>
int main()
{
int year;
int sum;
int i;
int a = 1;
int b = 1;
printf("Enter how many years: ");
scanf("%d",&year);
for(i=2;i<2 * year;i++){
if(i % 2 == 1){
a += b;
sum = a;
}
else{
b += a;
sum = b;
}
}
printf("There has %d rabbits after %d years.\n",year,sum);
return 0;
}
『贰』 C语言斐波那契数列兔子问题
#include<stdio.h>
intmain()
{
intf1=1,f2=1;
inti;
for(i=1;i<=20;i++)
{
printf("%12d%12d",f1,f2);//去掉
if(i%2==0)printf(" ");//去掉条件表达式的双引号
f1=f1+f2;
f2=f2+f1;
}
return0;
}
『叁』 c语言兔子问题
#include<stdio.h>
intmain()
{inti,n,a,b,c;
scanf("%d",&n);
a=b=1;
printf("1,1"); //输出前2个月的兔子数
for(i=3;i<=n;i++)//3~n个月
{c=a+b; //当月兔子总数(加上新出生小兔子)
printf(",%d",c);
a=b; //下月大兔子数
b=c; //下月初已有兔子总数
}
return0;
}
『肆』 C语言(兔子生兔子的问题)
问题1 那个说的是兔子对数,一对兔子计为1 (单位用对或双)
问题2 每两次printf()后换行,一个printf() 打出了两个数版,权所以每行是四个数
追问
如果是对数的话也不对啊
每个月兔子的对数应该是这个啊
1,1,2,2,2,4,4,4,8
和他的分析也是不一样的啊
繁殖问题应该是呈几何倍数增长的
让他说成了一个裴波那契数列了
按照他的分析,
1,1,2,3,5,8,13,21
第四个月是三对?
第三个月才生完一个月就生第二胎了?
兔子变蟑螂了?
回答:增加的那个1对不是新生的兔子生的,是原来的那一对兔子生的,所以是3 。你想想看原来的第一对兔子到了第4个月其实生了2对兔子。
『伍』 c语言100道题中,兔子生兔子程序怎么理解
有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
兔子的规律为数列:
1,1,2,3,5,8,13,21....
下面使用了迭代、递归和数组三种解法。
【代码一】使用迭代:
#include<stdio.h>
intmain()
{
longf1=1,f2=1;//兔子的数量
inti;//循环次数
intn;//要计算的月份
printf("输入要计算的月数:");
scanf("%d",&n);
//计算出循环次数
if(n%2==1){
n=(n+1)/2;
}else{
n=n/2;
}
for(i=1;i<=n;i++){
printf("第%d个月有%d只 ",i*2-1,f1);
printf("第%d个月有%d只 ",i*2,f2);
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
return0;
}
运行结果:
输入要计算的月数:10
第1个月有1只
第2个月有1只
第3个月有2只
第4个月有3只
第5个月有5只
第6个月有8只
第7个月有13只
第8个月有21只
第9个月有34只
第10个月有55只
【方法二】使用递归:
#include<stdio.h>
intFeibonacci(intn){
if(n==1||n==2)
return1;
else
returnFeibonacci(n-1)+Feibonacci(n-2);
}
intmain(){
intn;//要计算的月份
printf("输入要计算的月数:");
scanf("%d",&n);
printf("%d个月的兔子总数为%d ",n,Feibonacci(n));
return0;
}
运行结果:
输入要计算的月数:10
10个月的兔子总数为55
递归看上去非常符合逻辑,但是这种递归效率是非常慢的,不信你计算20, 30, 40 个月的兔子数试试,明显比另外两种方法慢多了,具体分析请看:C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈
【代码三】使用数组
#include<stdio.h>
voidmain()
{
inta[100],i,n;
printf("请输入月数:");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];
printf("第%d个月的兔子为:%d ",n,a[n-1]);
}
运行结果:
请输入月数:10
第10个月的兔子为:55
『陆』 C语言 兔子的繁殖问题(注意,就是按题目样例要求输入然后输出,要一样)
#include "stdio.h"
void func(int n)
{
int *p = new int[n];
p[0] = 1;
p[1] = 1;
for (int i=2; i<n; i++)
{
p[i] = p[i-2] + p[i-1];
}
for (int j=0; j<n; ++j)
{
printf("%d月,兔子数:%d\n", j+1, p[j]);
}
printf("\n");
}
void main()
{
while (1)
{
printf("请输入月份,输入-1离开:\n");
int n;
scanf("%d", &n);
if (n == -1)
{
break;
}
if (n<=0)
{
printf("输入错误,请重新输入。。。\n");
scanf("%d", &n);
}
func(n);
}
}
『柒』 c语言程序:兔子问题
#include <stdio.h>
main()
{
int i,tu1,tu2,tu3,m;
tu1=1;
tu2=1;
pringf("请输入月份数(要求不大于24)");
scanf("%d",&m);
if(m==1||m==2)
{
printf("有一对兔子");
}
else if(m<2&&m<=24)
{
for(i=3;i<=m;i++)
{
tu3=tu1+tu2;
tu1=tu2;
tu2=tu3;
}
printf("%d月的兔子数为#d\n",m,tu3);
}
else
{
printf("月份书输入不符合专要求,程序结束\n");
}
}
我们老属师都讲这题了~
『捌』 C语言编程:兔子繁殖问题
如图,此题难度较大,要用到队列(我优化为循环队列)
#include<stdio.h>
#defineLIFETIME13 //兔子寿命,单位半年(年龄小于此!)
#defineINITNUM1 //初始兔子有多少对
main()
{
inthY=0; //兔子历(就是时刻表):单位:半年
intnum[LIFETIME]={INITNUM,0}; //存储不同年龄兔子的对数(初始为0岁1对)
//babyI下标代表0岁,往前年龄增大,越过数组下界跳到上界,所以babyI+1反而是最老兔子
intbabyI=0; //0岁兔子对应下标,年龄单位为半年
intloveNum=0; //可生育兔子数量
inttotalNum=INITNUM; //总计兔子数量
intage1I=LIFETIME-2; //1岁兔子对应下标(开始能生育)
intage5_5I=LIFETIME-11; //1岁、5.5岁兔子对应下标(刚好能生育、刚好不能生育年龄)
intn=30; //输入n半年后!
while(hY<=n){
inti,j; //遍历临时变量。①展示兔子数量。
printf("第%.1f年 总计:%d对 可生育:%d对
",(float)hY/2,totalNum,loveNum);
/*
for(i=0;i<LIFETIME;i++){
printf("%.1f岁 ",(float)i/2); //打印表头
//printf("%d,%.1f岁 ",i,(float)(++i)/2); //打印表头
}printf("单位:对
"); //换行*/
i=babyI; //显示各年龄对应数量
j=0;
do{
//printf("%d ",num[i]);
if(hY<21){ //仅用于加 显示
if((++j)%2==0)printf(" ");}
printf("%d",num[i]);
if(i>0)i--; //下标循环往左移动
elsei=LIFETIME-1;
}while(i!=babyI);
printf("
"); //换行
//②半年后
hY++; //时间过去半年
age1I=(age1I+1)%LIFETIME; //1岁数量(对)对应下标
age5_5I=(age5_5I+1)%LIFETIME;//5.5岁数量(对)对应下标
//printf("%d,%d
",age1I,age5_5I);
loveNum+=num[age1I]-num[age5_5I]; //可生育兔子数量(对)
babyI=(babyI+1)%LIFETIME; //新babyI设为原最老兔子的下标,
totalNum+=loveNum-num[babyI]; //每对大兔子可以生一对小兔子-死亡的老兔
num[babyI]=loveNum; //老兔的位置换成新兔
}
}
『玖』 C语言兔子问题
#include<stdio.h>
intmain(void)
{
intn,i,a,b,c;
a=0;
b=1;
i=1;
printf("请输入兔子对数n=");
scanf("%d",&n);
while(b<n){
c=a+b;/*while里面一次循环是专1个月*/
a=b;
b=c;
i++;
}
printf("至少属%d月",i);
return0;
}