K 進製數 藍橋杯提公升題

2021-10-05 12:42:43 字數 1398 閱讀 4751

時間限制: 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,要求計算包...