計蒜客 難題題庫 030 合法分數的組合
阿新 • • 發佈:2019-01-23
輸入一個自然數N,我們總可以得到一些滿足“1≤b≤N,0≤a/b≤1”條件的最簡分數a/b(分子和分母互質的分數),請找出所有滿足條件的分數。
比方說,當N=5時,所有解為:
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
現在,你需要對於一個給定的自然數N,1≤N≤160,請程式設計按分數值遞增的順序輸出所有解。
注:0和任意自然數的最大公約數就是那個自然數、互質指最大公約數等於1的兩個自然數。
輸入包括一個給個給定的自然數N
輸出為一個列表,每個分數單獨佔一行,按照實際大小從小到大排列
樣例1
輸入:
5
輸出:
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
#include<iostream> #include<set> using namespace std; class node{ public: int a, b; double c; node(int i, int j) : a(i), b(j), c((double(a) / b)){} bool operator<(const node &n2) const{ return c < n2.c; } }; int main(){ int n, i, j; set<node> si; cin >> n; for(i = 1; i <= n; ++i){ for(j = 0; j <= i; ++j){ si.insert(node(j, i)); } } for(set<node>::iterator it = si.begin(); it != si.end(); ++it){ cout << it->a << "/" << it->b << endl; } }