帶分數 藍橋杯

2021-10-05 01:58:03 字數 1504 閱讀 5333

今天刷題刷到這題,其實題本身思路挺簡單,就是乙個庫函式引起了我的興趣。

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

100 可以表示為帶分數的形式:100 = 3 + 69258 / 714。

還可以表示為:100 = 82 + 3546 / 197。

注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含0)。

類似這樣的帶分數,100 有 11 種表示法。

輸入格式

從標準輸入讀入乙個正整數n (n<1000*1000)

輸出格式

程式輸出該數字用數碼1~9不重複不遺漏地組成帶分數表示的全部種數。

注意:不要求輸出每個表示,只統計有多少表示法!

樣例輸入1

100樣例輸出1

11樣例輸入2

105樣例輸出2

6

解題思路就是從這裡下手:

將1-9進行全排列,然後從中間按照某種順序擷取三段,以這三段分別作為a、b、c,接著帶入那個公式,並將得到的結果與輸入的數比較(a+1.0*b/c==m),最後利用陣列的隨機訪問特性直接輸出結果即可(即假設給出下面某種排列:123|4567|89,則你可以在這串數中任意插入兩根棍子,將其分成三部分)。

其中全排列就用到了next_permutation()函式,它包含在algorithm庫函式中。

1.字串全排列:

#include

#include

using namespace std;

intmain()

return0;

}

2.int全排列:

#include

#include

using namespace std;

intmain()

//cout(next_permutation

(a,a+n)

) cout<}return0;

}

#include#includeusing namespace std;

int main();

int cnt = 0;

long long n1, n2, n3;

dofor (x = 0; x < j;x++)

for (x = 0; x <= 8-i-j;x++)

if((n1+1.0*n2/n3)==m)

cnt++;

}}} while (next_permutation(a, a+9));

cout << cnt;

return 0;

}

next_permutation函式參考:

藍橋杯 帶分數

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