題目的意思就乙個n位的k進製數中不能有2個及2個以上的0是相鄰的,問這樣的數一共有多少個
首位肯定不能為0,前面的數如果為0則後面的數可以是除了0以外的任意數,前面的數如果不為0則後面的數就可以為任意值。
**實現只不過是模擬上面的過程,用乙個標記指示某一位是不是為0,如果前一位是0,那當前這位就一種情況就是非0,如果前一位為非0,那麼當前這位就需要分兩步做,先假設為0,再假設為非0,即使是人工計算也需要這麼做。
#include
#include
using
namespace std;
typedef
long
long ll;
const
int size =20;
ll sum =
1, ans =0;
int box[size]
, cnt =0;
int vis[size]
;void
dfs(
int index,
int n,
int k)
if(index ==1)
else
else
}return;}
intmain()
if(vis[index - 1] == 0)
,第一次寫成了cnt - 1
**中一共有3處--cnt
,只有第乙個是可以不寫的,下面兩個必須要寫,不然就得不到正確答案,因為cnt的意義就是當前的第cnt位,在dfs過程中是會不斷增加的,某個位置的情況判斷完後,這個位置現在的資訊就應該被丟棄了,取而代之的是下面我們要儲存的資訊,如果不刪除之前的資訊而讓新的資訊向後儲存,那老的資訊就會影響到結果,那結果自然就會出錯了。第乙個可以刪除的原因是,它上面的dfs如果結束以為著這個程式也就該結束了,沒有後續的操作了,當前的資訊刪不刪除無所謂了,但是為了程式意義的完整性,還是加上為好。
題目 1117 K 進製數
考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4位數.給定兩個數n和k,要求計算包含n位數字...
問題 1117 K 進製數
考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4位數.給定兩個數n和k,要求計算包含n位數字...
藍橋杯(C語言題目)題目 1117 K 進製數
時間限制 1sec 記憶體限制 128mb 考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.考慮包含n位數字的k 進製數.定義乙個數有效,如果其k 進製表示不包含兩連續的0.例 1010230 是有效的7位數 1000198 無效 0001235 不是7位數,而是4...