日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

赶鸭子

發(fā)布時間:2024/3/13 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 赶鸭子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、題目描述

一個人趕著鴨子去每個村莊賣,每經(jīng)過一個村子賣去所趕鴨子的一半又一只,這樣他經(jīng)過7個村莊后還剩2只鴨子,問他出發(fā)時工趕多少只鴨子?

二、算法構(gòu)造

1、遞歸算法
由題意可知,對于最后一個村子duck-(duck/2+1)=2,設(shè)此時為第0個村莊。由此,定義一個有一個變量的遞歸函數(shù)duck(v)。其中,v表示所經(jīng)過的村莊數(shù)。函數(shù)的意義是到達第v個村莊所有的鴨子總數(shù)。容易得到下面的遞歸公式:
duck(v) = { duck(0) = 1 v=1
| duck(v)+duck(v-1)+duck(0) v>0 && v<=7
2、非遞歸算法
具體算法實現(xiàn)如圖所示。

圖2.2 趕鴨子非遞歸實現(xiàn)

三、算法實現(xiàn)

// 遞歸實現(xiàn) int duck(int village){if(village == 0){return 2;}else if(village > 0){return 2 * (duck(village - 1) + 1);} } //在main()中輸出每一個村莊賣出的鴨子數(shù)for(i = 1; i <= 7; i++){temp = ducks / 2 + 1;printf("經(jīng)過第 %d 個村莊賣出 %d 個鴨子。\n", i, temp);ducks = ducks / 2 - 1;} // 非遞歸實現(xiàn) int duck_un(int village,int sell){int d = 2;int temp = 0;for(village; village > 0; village--){temp = (d + 1) * 2;printf("經(jīng)過第 %d 個村莊賣出 %d 個鴨子。\n",village,temp-d);d = (d + 1) * 2;}return temp; }

四、調(diào)試、測試及運行

1、調(diào)試
(1)進入duck()函數(shù),調(diào)用遞歸結(jié)束開始返回的各數(shù)據(jù)的值。


(2)duck()函數(shù)調(diào)用結(jié)束各數(shù)據(jù)的值。

(3)進入duck_un()函數(shù),調(diào)用遞歸結(jié)束開始返回的各數(shù)據(jù)的值。

(4)duck_un()函數(shù)調(diào)用結(jié)束各數(shù)據(jù)的值。

2、測試
測試代碼:

void test(int counts){int i = 1;for (; i <= 7; i++){counts = counts / 2 - 1;}if (counts == 2){printf("測試正確,最后剩余%d只鴨子。\n", counts);}else{printf("測試結(jié)果錯誤!\n");} }

測試結(jié)果:

3、運行

五、總結(jié)

test()函數(shù)傳參錯誤。

通過調(diào)試得知此時的ducks=2,應(yīng)傳入?yún)?shù)ducks1。

總結(jié)

以上是生活随笔為你收集整理的赶鸭子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。