‘壹’ c编程问题 兔子繁殖(递推)
6年时间是一个循环 0.5年生一对,每6年减一队以下是第一队兔子和它们直系儿子的图示,每一对直系兔子又包含这样的一个图示,时间关系只画一组,如果有错请指出
1年 1.5年 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 10 11
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
1 2 3 4 5 6 7 8 9 10 9
空格打不出来
第二行从5开始与上一行对齐,表示第一代兔子的第一对儿子
第三行从6开始,第四行从7开始依次后推,,
把每一列加起来是总数,但是这只是表示第一代兔子生的小兔子,和第一代兔子生的小兔子所生的小兔子,从第二行开始,下面又有一个这样的循环,空格打不出来,画了等于白画
1年--1.5--2--2.5--3--3.5--4--4.5--5--5.5--6--6.5--7--7.5--8--8.5--9--9.5--10--11
1----2----3--4----5--6----7--8----9--10---9--
------------------1--2----3--4----5---6---7---8---9--10---9
---------------------1----2--3----4---5---6---7---8---9--10---9
--------------------------1--2----3---4---5---6---7---8---9--10---9
-----------------------------1----2---3---4---5---6---7---8---9--10---9
----------------------------------1---2---3---4---5---6---7---8---9--10---9
--------------------------------------1---2---3---4---5---6---7---8---9--10---9
用---代替空格,图示就是这样
‘贰’ C语言编程:兔子繁殖问题 这是一个有趣的古典数学问题,着名意大利数
#include <stdio.h>
int main()
{int i,f[12]={1,1};
for(i=2;i<12;i++)
f[i]=f[i-1]+f[i-2];
printf("%d ",f[11]);
return 0;
}
‘叁’ c语言:兔子繁殖问题
兔子的对数,就是Fibonacci数列
#include <stdio.h>
long f(long n)
{
if(n<3) return 1;
else return f(n-2)+f(n-1);
}
void main()
{
printf("一年后,有兔子%ld对.\n", f(12));
getch();
}
---------------------------------------------------------
1 1 2 3 5 8 13 21 34 55 89 ...
‘肆’ 兔子繁殖,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;
}
‘伍’ c语言数组 兔子繁殖
double a[100];
printf("第%d个月的兔子为:%0.2f\n", n, a[n-1]);
改一下
‘陆’ C语言编程:兔子繁殖问题
思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是
longfun(intmonth)
{
if(month==1||month==2)
return1;
else
returnfun(month-1)+fun(month-2);
}
//ConsoleApplication1.cpp:定义控制台应用程序的入口点。
intmain()
{
intMon;
longNum;
scanf("%d",&Mon);
Num=fun(Mon);
printf("第%d月共有兔子%ld只 ",Mon,Num);
return0;
}
至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的
‘柒’ c语言题目 兔子繁衍问题 希望能给我详细讲讲思路 ,
#include "stdio.h"
int onemonth=1;
int twomonth=0;
int other=0;
int main()
{
int n;
int i=0;
printf("请输入一个正整数:");
scanf("%d",&n);
for(i=1;;i++)
{
int a=onemonth,b=twomonth,c=other;
onemonth=c;
twomonth=a;
other+=b;
if(onemonth+twomonth+other>=n)
{
printf("第%d个月数量将达到%d,为:%d\n",i,n,onemonth+twomonth+other);
break;
}
}
return 0;
}
思路很简单,就是循环月数+1,把兔子分为3类,一个月后能繁衍的,2个月后能繁衍的,3个月后能繁衍的,每次循环统计每类的个数就行了,一个简单的逻辑问题
‘捌’ c语言兔子繁殖问题
你好 可以创建一个数组a。
a[0]和a[1]都为1。
之后每一项都遵循a[n]=a[n-1]+a[n-2]。用for循环写。
由此依次列出每一项。每一项使用\t隔开。
需要一个count变量。每输出一个值count++
如果count求余5为0,输出一个\n。
最后就可以做到如图的输出,请给好评~
‘玖’ 紧急!电脑编程高手请进!C#编程:兔子繁殖问题
楼主 晚上睡不着 于是给你用三种方法解答 嘿嘿 不要浪费哦
public class Program
{
static void Main(string[] args)
{
Console.Write("请输入月数:");
string buffer = Console.ReadLine();
int Months = Convert.ToInt32(buffer); //结束月数
CalculateByObjectOriented(Months);
CalculateByRecursion(Months);
CalculateByMathematics(Months);
}
public static void CalculateByObjectOriented(int MonthCount) //面向对象方法实现
{
Console.Write("使用面向对象方法实现,总兔子数:{0}\n" , new RearRing(MonthCount).GetRabbitTotal());
}
public static void CalculateByMathematics(int MonthCount)
{
//能力有限,抽象不出表达式,偷懒一下
//画一个节点图,你就能清楚地看出为什么了
int Period = 3; //出生后第几个月能生小兔
int val1 = 0;
int val2 = 0;
int val3 = 1;
int RubbitsCount = 2;
if (MonthCount > 3)
{
RubbitsCount += val3 * 2;
for (int i = Period + 1; i < MonthCount + 1; i++)
{
val1 = val2;
val2 = val3;
val3 = val2 + val1;
RubbitsCount += val3 * 2;
}
}
Console.Write("使用数学方法实现,总兔子数:{0}\n", RubbitsCount);
}
public static void CalculateByRecursion(int MonthCount) //递归实现
{
Console.Write("使用递归实现,总兔子数:{0}\n" , GetFinalNum(0,MonthCount,0));
}
private static int GetFinalNum(int StartMonth, int MonthCount,int Level) //递归调用
{
int FinalNum=2;
int Period = 3; //出生后第几个月能生小兔
for (int i = StartMonth; i < MonthCount; i++)
{
if (i - StartMonth >= Period-1)
{
FinalNum += GetFinalNum(i, MonthCount, Level + 1);
}
}
//For Debug
//Console.Write("当前级数:{0},共有兔子:{1}\n", Level, FinalNum);
return FinalNum;
}
}
public class RearRing
{
public IList<Rabbits> rabbitsList = new List<Rabbits>();
public RearRing(int MonthCount)
{
rabbitsList.Add(new Rabbits(this));
for (int i = 1; i < MonthCount; i++)
{
int count = rabbitsList.Count; //获取当前兔子数
for(int j=0;j<count;j++)
rabbitsList[j].Grow();
}
}
public int GetRabbitTotal()
{
return Rabbits.RabbitNum;
}
public void Add()
{
Rabbits newRabbits = new Rabbits(this);
rabbitsList.Add(newRabbits);
}
}
public class Rabbits
{
public static int RabbitNum = 0; //兔子总数
private const int BornRabbitNum = 2; //每次出生多少只
private const int Period = 3; //出生后第几个月能生小兔
private int Birthdate = 1; //题目不大明确,刚出生算几个月大?在此假定刚出生1个月大,也就是说,"第三个月开始"表示两轮后
RearRing _rearRing;
public Rabbits(RearRing RearRing)
{
this._rearRing = RearRing;
RabbitNum += BornRabbitNum;
}
public void Grow()
{
Birthdate+=1;
if (Birthdate >= Period)
Bear();
}
private void Bear()
{
_rearRing.Add();
}
}
‘拾’ 兔子繁殖问题 C语言编程
根据题意,得出以下结果:
年份:0 0.5 1 1.5 2 2.5 3 3.5 4 ...
兔子:1 1 2 3 5 8 13 21 34...
序号: 0 1 2 3 4 5 6 7 8...
所以发现规律:除前两个外,后面的则是等于前两个的种即:A0=1,A2=1,An=A(n-1)+A(n-2)
这样程序就可以开始编制了
#include "stdio.h"
main()
{
int year,total,i,a1,a2;
printf("\n请输入多少年后:");
scanf("%d",&year);
a1=1;
a2=1;
for(i=2;i<2*year;i++)
{
if(i%2==1)
{
a1=a1+a2;
total=a1;
}else{
a2=a1+a2;
total=a2;
}
}
printf("\n第%d年末总共会有%d对兔子",year,total);
}