題目大意是:給定乙個字串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...