有序分数 知识点:枚举

62 阅读1分钟

1360. 有序分数 - AcWing题库

image.png

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
const int N=200;
typedef pair<int,int>PII;
PII q[N*N];	//分子分母
int n;
int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}

bool cmp(PII a,PII b)
{
	return a.x*b.y<a.y*b.x;
}
int main()
{
    cin>>n;
	int cnt=0;
	for(int i=1;i<=n;i++)    //枚举分母   分母不能为0,从1开始
	{
		for(int j=0;j<=i;j++)  //枚举分子  分子最大和分母一样,这样整体最大就是1,最小可以为0,这样整体最小为0
		{
			if(gcd(i,j)==1)
			{
				q[cnt++]={j,i};
			} 
		}
	}
	
	sort(q,q+cnt,cmp);
	
	for(int i=0;i<cnt;i++)
	cout<<q[i].x<<"/"<<q[i].y<<endl;
	return 0;
}