藍橋杯-歷屆試題-帶分數
阿新 • • 發佈:2019-01-02
歷屆試題 帶分數
問題描述
樣例輸入1
100
樣例輸出1
11
樣例輸入2
105
樣例輸出2
6
100 可以表示為帶分數的形式:100 = 3 + 69258 / 714。
還可以表示為:100 = 82 + 3546 / 197。
注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含0)。
類似這樣的帶分數,100 有 11 種表示法。
輸入格式從標準輸入讀入一個正整數N (N<1000*1000)
輸出格式程式輸出該數字用數碼1~9不重複不遺漏地組成帶分數表示的全部種數。
注意:不要求輸出每個表示,只統計有多少表示法!
#include<iostream> #include<algorithm> using namespace std; int d[] = { 1,2,3,4,5,6,7,8,9 }; int n, number = 0; int A, B, C; void div() { for (int i = 1; i <= 8; i++) //整數位數 { //形成整數 A = 0; for (int ii = 0; ii <i; ii++) { A = A * 10 + d[ii]; } for (int j = 1; j <9 - i; j++) //分子位數 { //形成分子 B = 0; for (int jj = 0; jj < j; jj++) { B = B * 10 + d[jj + i]; } //形成分母 C = 0; for (int kk = 0; kk < 9 - i - j; kk++) { C = C * 10 + d[kk + i + j]; } //比較 if (B%C == 0 && A + B / C == n) { number++; } } } } int main() { cin >> n; do { div(); //分為三個數 } while (next_permutation(d, d + 9)); //全排列 cout << number << endl; return 0; }