题目链接:http://acm.swust.edu.cn/problem/801/
Time limit(ms): 1000 Memory limit(kb): 10000
Description
Consider the set of all reduced fractions between 0 and 1 inclusive with denominators less than or equal to N.
Here is the set when N = 5:
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
Write a program that, given an integer N between 1 and 160 inclusive, prints the fractions in order of increasing magnitude.
Input
One line with a single integer N.
Output
One fraction per line, sorted in order of magnitude.
Sample Input
5 |
Sample Output
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 |
题目大意:给定一个数,代表分母的最大值,从小到大,输出所有分母小于N,值小于等于1的所有分数
直接上代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #define maxn 1000010 5 using namespace std; 6 struct node{ 7 int x, y; 8 bool operator<(const node &tmp)const{ 9 if (x != tmp.x) 10 return x*tmp.y < y*tmp.x; 11 return y > tmp.y; 12 } 13 }a[maxn]; 14 int gcd(int a, int b){ 15 return !b ? a : gcd(b, a%b); 16 } 17 int main(){ 18 int n, i, j; 19 while (~scanf("%d", &n)){ 20 int pos = 0; 21 //i代表分母,j代表分子 22 for (i = 1; i <= n; i++){ 23 for (j = 0; j <= i; j++){ 24 if (!j&&i != 1) continue; 25 if (gcd(j, i) == 1){ 26 a[pos].x = j; 27 a[pos++].y = i;// x/y 28 } 29 } 30 } 31 sort(a, a + pos); 32 for (i = 0; i < pos; i++) 33 printf("%d/%d\n", a[i].x, a[i].y); 34 } 35 return 0; 36 }
时间: 2024-11-03 08:04:39