100 可表示為帶分數的形式:3+69258/714 或 82+3546/197。類似這樣的帶 分數,100 共有 11 種表示法。帶分數中,數字 1~9 分別出現且只出現一 次(不包含 0)。
請編寫一個 C++程序,輸入一個正整數 N (N<1000000), 輸出 N 用數碼 1~9 不重復不遺漏地組成帶分數表示的全部種數。例如,輸 入 100,則輸出 11;輸入 105,則輸出 6。 注意:不要求輸出每個表示,只輸出所有的帶分數表示法的種數!
#include<iostream> #include<algorithm> using namespace std; int f(int start, int end,int *arr){ if (start > end) return 1; int n = 0; for (int i = start; i <= end; i++){ n = n * 10 + arr[i]; } return n; } int size(int n){ int count=0; while (n){ count++; n /= 10; } return count; } int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int n, a, b, c,count=0; cin >> n; do{ for (int i = 0; i <= size(n); i++){ for (int j = i; j < 8; j++){ a = f(0, i, arr); b = f(i + 1, j, arr); c = f(j + 1, 8, arr); if (n == a + b / c && b % c == 0){ count++; cout << a << "+" << b << "/" << c << endl; } } } } while (next_permutation(arr, arr + 9)); cout << count << endl; }
