一道遞迴問題

2021-08-07 13:22:58 字數 1579 閱讀 7367

題目大意是:給定乙個字串a,然後給定多個單詞,然後根據給定的單詞在字串中插入空格,求插入空格最少的組合。例如給定字串ilikeeverything,給定單詞i、like、every、thing、likeeverything。輸出為i likeeverything。

#include #include #include #include #include #include#includeusing namespace std;

string result;

int mincount=1000;

int count1 = 0;

bool flag = false;

//注意遞迴裡面最好不要有全域性變數,如果返回,注意儲存有上次的值。如果想把本次的值傳遞到下一次遞迴,

//完全可以利用引數傳值傳遞,而且返回後,值不變(變化的注意復原)。(我只是在結束條件滿足時獲得值即可,中間的值我又不需知道)

//local:當前查詢的起始位置

//resulttemp:暫存結果,因為會有多個解。

//blanknum:插入的空格數量

//str:要插入空格的字串

//dict:字典(放入的是多個字串)

void mincut(int local,string resulttemp,int blanknum,const string& str, const set& dict)

}else//不符合結束條件,就繼續

} }}

int main(int argc, const char * argv)

注意遞迴的結束條件,本題使用的方法相當於深度優先搜尋,一次查詢結束的條件是下次查詢的起始位置超出字串的個數。

特別注意遞迴後的**如何寫(想下遞迴返回後自己想要幹什麼,對於本題我的解法相當於深度優先搜尋,所以遞迴返回後會走另一條路,所以還原一些需要用到的變數)

另一道題是:給定乙個字串a,另外給乙個字串b,問a能組合出多少個b?(a中相對順序要一致)

例:a:asdad  b:asd 輸出結果為2

#include #include #include #include #include #include#includeusing namespace std;

int numcount = 0;

void mincut(int strlocal,int dictlocal, const string str, const string dict)

if (strlocal == str.size())

return;

for (int i = strlocal; i < str.size(); i++) }

}int main(int argc, const char * argv)

system("pause");

return 0;

}

此程式修改的最上面的**,最上面的**可以照著下面的修改下,傳入變數類似這樣寫
mincut(i+1, dictlocal+1, str, dict),這樣就不用還原i及dictlocal了。

一道概率問題

題目 有一輛汽車有n個座位,編號為1 n,有n個人買票拿號上車,正常人按照自己的座位號對號入座,但是有乙個精神病患者,在空座位中隨機選擇乙個空著的座位就坐,正常人的座位如果被佔,也將隨機選擇乙個空著就坐,假如第乙個上車的是精神病患者,其他人都是正常人,問最後乙個人能坐到自己的座位的概率是多少?對於概...

解一道遞迴呼叫題

int ack int m,int n ack 3,3 的輸出是什麼?假設我們將ack m,n 填充到乙個二維矩陣的第m行第n列,從函式中可以看出第m行第n列的資料依賴於第m 1行和第m行第n 1列的資料。根據if m 0 return n 1 可以填充第0行的資料為0,1,2,3,4,5,6,7....

求解一道arduino問題

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...