『壹』 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);
}