100 可以表示為帶分數的形式:100=3
+69258
714100 = 3 + \frac
100=3+
7146
9258
還可以表示為:100=82
+3546
197100 = 82 + \frac
100=82
+197
3546
注意特徵:帶分數中,數字 1∼9
1∼91∼
9分別出現且只出現一次(不包含 0
00)。
類似這樣的帶分數,100
10010
0有 11
1111
種表示法。
輸入格式
乙個正整數。
輸出格式
輸出輸入數字用數碼 1∼9
1∼91∼
9 不重複不遺漏地組成帶分數表示的全部種數。
資料範圍
1 ≤n
<10
61≤n<10^6
1≤n<10
6輸入樣例1:
100
輸出樣例1:11
輸入樣例2:105
輸出樣例2:6
直接列舉每一種排列,然後雙重迴圈列舉分界點,將排列分為三部分,求出結果
可以看出,如果第乙個數已經大於給定的值,即可及時break掉減少一層迴圈
時間複雜度
o (n
!×n)
o(n!×n)
o(n!×n
) c++ **
#include
using
namespace std;
int n;
const
int n =10;
int a[n]
;bool st[n]
;int res =0;
intcal
(int l,
int r)
void
dfs(
int u)}}
for(
int i =
1;i <=
9;i ++)}
}int
main()
只需要列舉a
aa和c
cc,根據b=c
×n−a
×c
b = c × n - a × c
b=c×n−
a×c求出b即可,然後判斷b的每一位是否都有用到
那麼我們可以巢狀遞迴,對於a
aa的每乙個分支,都遞迴求出ccc
c++ **
#include
#include
#include
using
namespace std;
const
int n =20;
bool st[n]
, backup[n]
;int n;
int ans;
bool
check
(int a,
int c)
for(
int i =
1;i <=
9;i ++)if
(!backup[i]
)return
false
;return
true;}
void
dfs_c
(int u,
int a,
int c)}}
void
dfs_a
(int u,
int a)}}
intmain()
藍橋杯 帶分數
問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...
藍橋杯 帶分數
問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...
藍橋杯 帶分數
100 可以表示為帶分數的形式 100 3 69258 714 還可以表示為 100 82 3546 197 注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。題目要求 從標準輸入讀入乙個正整數n n 1000 1000 程式輸出該數字用數碼...