資源限制
時間限制:1.0s 記憶體限制:256.0mb
100 可以表示為帶分數的形式:100 = 3 + 69258 / 714。
還可以表示為:100 = 82 + 3546 / 197。
注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含0)。
類似這樣的帶分數,100 有 11 種表示法。
從標準輸入讀入乙個正整數n (n<1000*1000)
程式輸出該數字用數碼1~9不重複不遺漏地組成帶分數表示的全部種數。
注意:不要求輸出每個表示,只統計有多少表示法!
我們可以發現每次只有十個數字而且還不能重複,很明顯的dfs
dfsdf
s的題目,我們把數字分成三部分,比如100=3
+69258
/714
100 = 3 + 69258 / 714
100=3+
6925
8/71
4中,blo
ck1=
3,bl
ock2
=69258,b
lock
3=
714block1=3,block2=69258,block3=714
block1
=3,b
lock
2=69
258,
bloc
k3=7
14,b lo
ck
1block1
block1
我們可以直接遍歷1
11 ~ n−1
n-1n−
1實現,blo
ck2,
bloc
k3
block2,block3
block2
,blo
ck3通過dfs
dfsdf
s找出每乙個不重複的陣列a
aa然後用乙個i(s
tep/
2≤i≤
step
−1
)i(step/2\leq i\leq step-1)
i(step
/2≤i
≤ste
p−1)
將這個a
aa切分成兩部分,也就是blo
ck2,
bloc
k3
block2,block3
block2
,blo
ck3。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
typedef vector<
int> veci;
typedef vector vecl;
typedef pair<
int,
int> pii;
template
<
class
t>
inline
void
read
(t &ret)
inline
void
out(
int x)
bool book[20]
=;int a[20]
=;int cnt =0;
void
getnum
(int
&x,int
&y,int sp,
int n)
for(
int i = sp; i < n; i++)}
void
dfs(
int step,
int le,
int sum,
int num)
}return;}
for(
int i =
1; i <=
9; i++)}
intmain()
book[x %10]
=true
, x /=10
, num++;}
if(flag ==
true
)continue;if
(book[0]
==true
)continue
;dfs(0
, i, n, num);}
out(cnt)
;}
藍橋杯 PREV 3 帶分數
歷屆試題 帶分數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格...
藍橋杯 PREV 3 帶分數(dfs)
prev 3 帶分數 思路 根據題意我們需要找到滿足 n x z y n x z y的 x,y,z x y,z 三元組解的個數,且x,y zx,y,z中所有數字不相同且剛好是11到9 9的乙個排列 1.我們需要知道x x的位數不能超過n n 乙個數x x的位數可以用lg x 1 lg x 1計算得出...
藍橋杯 PREV 3 歷屆試題 帶分數
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標...