今天刷題刷到這題,其實題本身思路挺簡單,就是乙個庫函式引起了我的興趣。
資源限制
時間限制: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 程式輸出該數字用數碼...