算法要点是求最大公约数和分数排序,无难点 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> #include<vector> using namespace std; ifstream fin("frac1.in"); ofstream fout("frac1.out"); struct node{ int a,b; }; node num[40000]; int n,li=0; int cmp(const void * a,const void * b){ struct node *aa=(node *)a; struct node *bb=(node *)b; return(((aa->a*bb->b)>(bb->a*aa->b))?1:-1); } int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); } void solve(){ for(int i=1;i<n;i++){ for(int j=n;j>i;j--){ if(gcd(i,j)==1){ num[li].a=i;num[li].b=j; li++; } } } qsort(num,li,sizeof(num[0]),cmp); for(int k=0;k<li;k++) fout<<num[k].a<<"/"<<num[k].b<<endl; } int main(){ fin>>n; fout<<"0/1"<<endl; solve(); fout<<"1/1"<<endl; return 0; }