解题报告——2017年C/C++ A组第五题 字母组串(递归)
生活随笔
收集整理的這篇文章主要介紹了
解题报告——2017年C/C++ A组第五题 字母组串(递归)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
由 A,B,C 這3個字母就可以組成許多串。
比如:“A”,“AB”,“ABC”,“ABA”,“AACBB” …
?
現在,小明正在思考一個問題:
如果每個字母的個數有限定,能組成多少個已知長度的串呢?
?
他請好朋友來幫忙,很快得到了代碼,
解決方案超級簡單,然而最重要的部分卻語焉不詳。
?
請仔細分析源碼,填寫劃線部分缺少的內容。
?
對于上面的測試數據,小明口算的結果應該是:
6
19
分析與題解
對于藍橋杯的代碼填空,一個簡單粗暴且有效的方法是:瞎試,有時候,試著試著就出來了。
藍橋杯的代碼填空,大部分都是遞歸或者回溯, 往往還會給我們幾個樣例的運行結果, 而遞歸的代碼無非就是那幾種, 多試幾次就出來了。
對于本題:
什么情況下,n從i變為i+1呢? 一定是在串中多使用了一個字母, 這個字母可以是a,可以是b,也可以是c。
因此,將三種可能性相加, 結果就出來了。
也就是:
#include <stdio.h>// a個A,b個B,c個C 字母,能組成多少個不同的長度為n的串。 int f(int a, int b, int c, int n) {if(a<0 || b<0 || c<0) return 0;if(n==0) return 1; return f(a-1,b,c,n-1)+f(a,b-1,c,n-1)+f(a,b,c-1,n-1) ; // 填空 }int main() {printf("%d\n", f(1,1,1,2));printf("%d\n", f(1,2,3,3));return 0; }PS:被前四題折磨的我。。 看到這道題仿佛看到了曙光。。
好句分享,共勉之:
一日只練一日功,一日不練十日空。
總結
以上是生活随笔為你收集整理的解题报告——2017年C/C++ A组第五题 字母组串(递归)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25行代码AC_ 2017年C/C++
- 下一篇: s3c2440移植MQTT