藍橋杯 帶分數

2021-10-25 19:40:25 字數 1900 閱讀 8721

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 程式輸出該數字用數碼...