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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解)

發布時間:2025/3/8 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

又涉及到遞歸問題,這道題的大致內容是這樣的:

(請用遞推方式求解)對于一個2行N列的走道。現在用1*2,2*2的磚去鋪滿。問有多少種不同的方式。下圖是一個2行17列的走道的某種鋪法。

? ? 提示:觀察前n個結果,可以得到遞推式子;如果N很大,需要高精度計算。

其實這道題,與之前的方格涂色問題很像,說它像不僅因為在思考方式上很像,在最后的代碼上也很想像,聽我一一道來。

題目提示,先觀察前n個結果得到遞推式。那我們就把前n個結果列出來。在列的同時,就有一種這樣的感覺——就像是在高中化學中寫同分異構式,“有序思考”。在這里我就不展示我在草稿紙上列舉的了直接說思想。

一、主要思想

和講解方格涂色問題一樣,我先來講一下我的思路:

每次鋪磚時考慮的情況大致類似,所以可以用遞歸求解。根據最后剩余的列數,我們將本問題分成兩種情況:

A:最后剩余一列,那么假設把這列去掉后,其鋪磚情況與n-1時的情況一樣,而加上后,也只有一種情況所以方法數位pave(n-1)

B:最后剩余兩列,那么把這兩列先去掉后和n-2的情況一樣,加上這兩列后一共有三種情況:1*2豎著放2列,1*2橫著放,2*2直接填滿。因為1*2豎著放和A情況重復,所以方法數為pave(n-2)*2

綜上:方法總數=pave(n-1)+2*pave(n-2)

二、具體實現

思路有了,但是其中的pave()函數還沒有,這就需要我們動手來操作了。以下是具體實現的代碼,如果看過我之前那篇博文的同學可能就會知道,這不是一樣的問題嘛!對的,代碼幾乎一樣。

#include<iostream> using namespace std; long long pave(int n) {long long c[3] = { 0 };//保存不使用2*2磚的方法次數c[0] = 1;//由數學邏輯推出c[1] = 3;//同上c[2] = 5;//同上if (n == 1)return 1;else if (n == 2)return 3;else if (n == 3)return 5;elsereturn pave(n - 1) + 2 * pave(n - 2);//用遞歸求解 } int main() {int n;cout << "請輸入走道的列數N" << endl;while (cin >> n){if (n == 0){cout << "輸入有誤,請重新輸入!" << endl;continue;}cout << "對應的鋪法有:" << endl;cout << pave(n) << endl;cout << "鋪磚已完成" << endl;cout << "請輸入下一走道的列數:(無其他輸入請按EOF結束)" << endl;}return 0; }

總結

以上是生活随笔為你收集整理的C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。