時間限制: 1sec記憶體限制: 128mb
題目描述
考慮包含n位數字的k-進製數. 定義乙個數有效, 如果其k-進製表示不包含兩連續的0.
考慮包含n位數字的k-進製數. 定義乙個數有效, 如果其k-進製表示不包含兩連續的0.
例:1010230 是有效的7位數
1000198 無效
0001235 不是7位數, 而是4位數.
給定兩個數n和k, 要求計算包含n位數字的有效k-進製數的總數.
假設2 <= k <= 10; 2 <= n; 4 <= n+k <= 18.
輸入
兩個十進位制整數n和k
輸出
十進位制表示的結果
樣例輸入210
樣例輸出
90這道題我們採用遞推形式來一步一步得出答案
考慮n位數k進製
我們定義res_0,res_1兩個變數
首先考慮第一層,只有兩位數時:
①第一位數字是非零,那麼可以取得的結果是res_1=(k-1)k,這幾個數字對於兩位數字來說都是合理的。
②第一位數字是零時,第二位取得是合理數字,res_0=k-1,就是01、02
03、04、05、06、07、08、09,這裡記錄res_0的作用一方面是記錄了n為1時的數字總數,二是為了參與遞推
此時res_0已經儲存了n=1時的答案,所以不需要單另分析n=1的情形
接下來考慮第二層,n=3時
①我們需要乙個變數來儲存res_1,因為這個代表了n=2時數字的數目,需要之後賦值給res_0
②res_1更新為(k-1)*(res_0+res_1),res_1很好理解把,因為res_1本身已經是合法數字了,前面再新增一位數,就變成了(k-1)*res_1位合法數字了,但這些合法數字缺少倒數第二位為0的合法數字,所以我們還需要(k-1)res_0,這裡res_0這些數字開頭都是0,本身不合法,但是res_0後的數字都合法,前面再加乙個非零數字,自然也合法,所以總的就是(k-1)(res_0+res_1)
③res_0=temp,把①中說的中間變數賦值給res_0
**如下
#include
#include
#include
#include
using
namespace std;
intmain()
printf
("%d\n"
,res_0);}
return0;
}
2 k進製數 藍橋杯提公升題
這道題是乙個考察進製和組合數問題的題目,對於我這樣的新手來說,碰到這樣的題還是比較頭疼的,畢竟腦子轉不過彎來。時間限制 1sec記憶體限制 128mb 題目描述 設r是個2 k 進製數,並滿足以下條件 1 r至少是個2位的2 k 進製數。2 作為2 k 進製數,除最後一位外,r的每一位嚴格小於它右邊...
藍橋杯 K 進製數
時間限制 1sec 記憶體限制 128mb 提交 152 解決 46 題目描述 考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效...
藍橋杯 K 進製數
題目描述 考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4位數.給定兩個數n和k,要求計算包...