亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
樓主: loveguohuasai
打印 上一主題 下一主題

[算法] 母牛數(shù)量算法 [復(fù)制鏈接]

論壇徽章:
0
141 [報(bào)告]
發(fā)表于 2004-10-15 19:02 |只看該作者

母牛數(shù)量算法

是不是老師出的題目,你拿到這里來找答案了,這樣可不好,自己做出來才對(duì)

論壇徽章:
0
142 [報(bào)告]
發(fā)表于 2004-10-15 22:12 |只看該作者

母牛數(shù)量算法

個(gè)人版的母牛
PS:測(cè)試一下GCC的擴(kuò)展

  1. #include <stdio.h>;
  2. int main()
  3. {
  4.   int n;
  5.   int cow[15]={2,3,4,6,9,13,19,28,41,60,88,129};
  6.   
  7.   printf("input n years, from 1\n");
  8.   scanf("%d", &n);
  9.   switch(n)
  10.         {
  11.      case 0 ...3:
  12.                   printf("total is %d\n",1);
  13.          break;
  14.          case 4 ...15:
  15.                  printf("total is %ld\n", cow[n-4]);
  16.          break;
  17.          default:
  18.                  printf("Sorry,The Cow is dead!");
  19.     }

  20.    return 0;
  21. }  
復(fù)制代碼

論壇徽章:
0
143 [報(bào)告]
發(fā)表于 2004-10-22 23:57 |只看該作者

母牛數(shù)量算法

C/C++版的精華也有這樣的東東啊
一年多前的貼子了,好大的坑。。!

其實(shí)是Fibonacci斐波那契數(shù)列的變形了,原始的遞進(jìn)間隔是3

  1,1,2,3,5,8,13,21,34…  從第三年起,n(i)=n(i-1)+n(i-2)

現(xiàn)在的間隔改成4,就是

1,1,1,2,3,4,6,9,13…  從第四年起,n(i)=n(i-1)+n(i-3)

如果是5,就是
1,1,1,1,2,3,4,5,7,10,14…  從第五年起,n(i)=n(i-1)+n(i-4)

………………………………………………………………

回頭看間隔為2的情況,顯然從第2年起 n(i)=n(i-1)+n(i-1)

所以,就是設(shè)間隔為非一正整數(shù)step(step為1時(shí),數(shù)量無限大),就是第step年起開始生BB,則迭代公式為n(i)=n(i-1)+n(i-step+1)


用C++遞歸實(shí)現(xiàn)就是(在Linux g++ 及Windows VC++6和BCB6下編譯通過):


  1. /*-----------------------Fibonacci.h----------------------------*/

  2. #include <iostream.h>

  3. class Fibonacci
  4. {
  5.   private:
  6.       unsigned int step; //遞進(jìn)間隔,大于1的正整數(shù)
  7.       unsigned int year; //要計(jì)算的年數(shù)
  8.       long number;   //計(jì)算結(jié)果
  9.       bool mark;  //標(biāo)識(shí)step是否在合理范圍內(nèi)及是否成功調(diào)用Set();
  10.   public:
  11.          Fibonacci(); //構(gòu)造函數(shù)顯示初始化
  12.       unsigned int Get_year();
  13.          int  Display(); //輸出計(jì)算結(jié)果
  14.       void  Set(); //輸入間隔和要計(jì)算的年數(shù)
  15.       long  Fib_num(unsigned int); //計(jì)算數(shù)列,遞歸用的
  16. };



  17. /*-----------------------Fibonacci.cpp----------------------------*/


  18. #include "Fibonacci.h"

  19. Fibonacci :: Fibonacci()
  20. {
  21.    step = 0;
  22.    year = 0;
  23.    number = -1; //標(biāo)識(shí)是否成功調(diào)用Fib_num()
  24.    mark = 0;
  25.    cout<< " Fibonacci數(shù)列實(shí)例:假設(shè)一頭母牛在出生后第x年開始每年生下一頭小母牛,且母牛不死亡。則第n年總共有母牛多少頭?"<< endl;
  26. }

  27. unsigned int Fibonacci :: Get_year()
  28. {
  29.     return(year);
  30. }

  31. int Fibonacci :: Display()
  32. {
  33.    if(mark&&number != -1)
  34.      cout<< "假設(shè)一頭母牛在出生后第"<< step<< "年開始每年生下一頭小母牛,且母牛不死亡。\n"<< "則第"<< year<<"年總共有母牛" << number << "頭。"<< endl;
  35.    else
  36.      cout<< "接口函數(shù)調(diào)用錯(cuò)誤!請(qǐng)先進(jìn)行數(shù)據(jù)成員設(shè)置Set()和結(jié)果計(jì)算Fib_num()步驟。"<< endl;
  37.    return(0);
  38. }

  39. void Fibonacci :: Set()
  40. {
  41.    cout<< "請(qǐng)輸入x,x為大于1的正整數(shù):"<< endl;
  42.    do
  43.    {
  44.     cin >>step;
  45.           if(step>1)  {mark=1; break;}
  46.           else  cout<< "請(qǐng)輸入大于1的正整數(shù)。"<< endl;
  47.    }while(mark);
  48.    cout << "請(qǐng)輸入n,n為非負(fù)整數(shù),否則將得到不正確結(jié)果:"<< endl;
  49.    cin >>year;
  50. }

  51. long Fibonacci :: Fib_num(unsigned int i)
  52. {
  53.    if(mark)
  54.      {
  55.        if(i==0) number = 0;
  56.        else if(i<step) number = 1;
  57.        else  number = Fib_num(i-1)+Fib_num(i-step+1);  //計(jì)算公式就在這了
  58.      }
  59.    else
  60.      cout<< "接口函數(shù)調(diào)用錯(cuò)誤!請(qǐng)先進(jìn)行數(shù)據(jù)成員設(shè)置Set()步驟。"<< endl;
  61.    return(number);
  62. }

  63. int main()
  64. {
  65.     Fibonacci cow;
  66.     cow.Set();
  67.     cow.Fib_num(cow.Get_year());
  68.     cow.Display();
  69.     return 0;
  70. }

復(fù)制代碼


以上是Fibonacci的遞歸實(shí)現(xiàn)了,如果year很大的話,那效率會(huì)比較低。

如果是非遞歸實(shí)現(xiàn),可以,定義幾個(gè)記錄變量,目的是記錄n(i-step+1)的值就可以了。不過程序是對(duì)具體的實(shí)例的,通用性很不好的。

要實(shí)現(xiàn)通用程序,可以定義一個(gè)大數(shù)組作為記錄(面向?qū)ο筇匦圆缓茫⒒蛴面湵韺?shí)現(xiàn)(太麻煩),或者用new動(dòng)態(tài)分配堆對(duì)象變量數(shù)組(最好重載new和delete,避免產(chǎn)生堆碎片而導(dǎo)致程序出錯(cuò)或者效率低下)

[ 本帖最后由 軒轅砍刀 于 2006-3-16 13:34 編輯 ]

1072366949112.jpg (53.17 KB, 下載次數(shù): 79)

1072366949112.jpg

論壇徽章:
0
144 [報(bào)告]
發(fā)表于 2004-10-26 00:34 |只看該作者

母牛數(shù)量算法

用precalculate,就是把你以前計(jì)算出來的值保留在數(shù)組里面,下次用到的時(shí)候就可以直接存取,不必要做重復(fù)的遞歸,算100年以上的話至少可以比你用的時(shí)候少幾十倍。

論壇徽章:
0
145 [報(bào)告]
發(fā)表于 2004-10-26 10:53 |只看該作者

母牛數(shù)量算法

F(n)>;=2^(n/2)

論壇徽章:
0
146 [報(bào)告]
發(fā)表于 2004-10-30 12:54 |只看該作者

母牛數(shù)量算法

到底哪個(gè)是對(duì)的呀,
可不可以發(fā)到我的信箱里呀,
我是個(gè)新手呀,
好多地方不明白呀。
我的信箱是      :     fywtaichen@sina.com.cn         
誰寫個(gè)完整的發(fā)到我這里呀,
先謝謝了。。!

論壇徽章:
0
147 [報(bào)告]
發(fā)表于 2004-10-30 21:49 |只看該作者

母牛數(shù)量算法

非遞歸算法,反正我算第100年時(shí)基本上沒有費(fèi)什么時(shí)間:
int initCowCount = 1;
int yearInterval = 100;
long cowSum = initCowCount;

long cowCount_0 = 0;        // 剛出生的牛的數(shù)量
long cowCount_1 = 0; // 一歲的牛的數(shù)量
long cowCount_2 = 0;        // 兩歲的牛的數(shù)量
long cowCount_3 = 0;        // 三歲及其以上的牛的數(shù)量

int main(int argc, char* argv[])
{
        cowCount_0 = initCowCount;
        long t1 = 0;
        long t2 = 0;
        long t3 = 0;
        // 計(jì)算牛的數(shù)量
        for(int i=0; i<yearInterval; i++){
                // 如果有剛出生的牛
                if(cowCount_0>;0){
                        t1 = cowCount_0;
                        cowCount_0 = 0;
                }
                // 如果有一歲的牛
                if(cowCount_1>;0){
                        t2 = cowCount_1;
                        cowCount_1=0;
                }
                // 如果有兩歲的牛
                if(cowCount_2>;0){
                        t3=cowCount_2;
                        cowCount_2=0;
                }
                // 如果有三歲及其以上的牛
                if(cowCount_3>;0){
                        cowCount_0=cowCount_3;
                }
                cowCount_1 = t1;
                cowCount_2 = t2;
                cowCount_3 += t3;
               
                cowSum = cowCount_0+cowCount_1+cowCount_2+cowCount_3;
        }//end for

        printf("第%d年后母牛的數(shù)量為%d!\n\t",yearInterval,cowSum);
        return 0;
}

論壇徽章:
0
148 [報(bào)告]
發(fā)表于 2004-10-31 19:08 |只看該作者

母牛數(shù)量算法

[quote]原帖由 "star55"]用precalculate,就是把你以前計(jì)算出來的值保留在數(shù)組里面,下次用到的時(shí)候就可以直接存取,不必要做重復(fù)的遞歸,算100年以上的話至少可以比你用的時(shí)候少幾十倍。[/quote 發(fā)表:


暈4,我無語(yǔ)了……

麻煩先仔細(xì)看完人家的帖子再發(fā)言。

論壇徽章:
0
149 [報(bào)告]
發(fā)表于 2005-01-11 17:20 |只看該作者

母牛數(shù)量算法

其實(shí)簡(jiǎn)單得很,第n年的數(shù)量是上一年牛的數(shù)量加上3年前牛的數(shù)量,因?yàn)槿昵暗哪荚谶@一年生小牛了,也就是:f(n)=f(n-3)+f(n-1), 不管遞推還是遞歸都很容易計(jì)算。

論壇徽章:
0
150 [報(bào)告]
發(fā)表于 2005-01-20 14:26 |只看該作者

母牛數(shù)量算法

原帖由 "aero" 發(fā)表:
4周歲開始生小牛:10年:10,30年:6272
3周歲開始生小牛:10年:19,30年:39865
PS:看哪,這就是晚生優(yōu)生的結(jié)果。


再加一條,還應(yīng)該讓牛也計(jì)劃生育,情況就會(huì)好多了......
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP