P1458 [USACO2.1]顺序的分数 Ordered Fractions - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
struct node
{
int fz,fm; //分子 分母
}a[100010];
int n;
int gcd(int a, int b) //辗转相除法
{
if(b == 0) return a;
return gcd(b, a % b);
}
bool cmp(node a, node b)
{
return a.fz * b.fm < b.fz * a.fm; // 值小的在前面
}
int main()
{
cin >> n;
a[1].fz = 0; a[1].fm = 1;
a[2].fz = 1; a[2].fm = 1;
int k = 2;
for(int i = 1; i <= n; i++) // 枚举分母
for(int j = 1; j < i; j++) //枚举分子 分子不能超过分母
if(gcd(i,j) == 1) //互质
{
k++;
a[k].fz = j;
a[k].fm = i;
}
sort(a + 1, a + 1 + k, cmp);
for(int i = 1; i <= k; i++)
printf("%d/%d\n",a[i].fz,a[i].fm);
return 0;
}