地址:http://hustoj.sinaapp.com/problem.php?id=1838
笨办法
先列出所有分母不大于n的真分数,用二维数组储存,然后按分数大小排序
输出的时候按顺序来,选gcd(分子, 分母)=1的输出
1 #include <iostream> 2 #include <algorithm> 3 #define MAX 160 4 using namespace std; 5 6 int n; 7 int **f=new int *[MAX*(MAX-1)/2+2]; 8 9 bool cmp(int *a,int *b) 10 { 11 double x,y; 12 x=(double)a[0]/(double)a[1]; 13 y=(double)b[0]/(double)b[1]; 14 return x<y; 15 } 16 17 int main() 18 { 19 ios::sync_with_stdio(false); 20 cin>>n; 21 int l=n*(n-1)/2+2; 22 int i=0; 23 f[i]=new int[2]; 24 f[i][0]=0; 25 f[i][1]=1; 26 i++; 27 while(i<l) 28 { 29 if(i==l-1) 30 { 31 f[i]=new int[2]; 32 f[i][0]=f[i][1]=1; 33 break; 34 } 35 for(int j=n;j>1;j--) 36 for(int k=1;k<j;k++) 37 { 38 f[i]=new int[2]; 39 f[i][0]=k; 40 f[i][1]=j; 41 i++; 42 } 43 } 44 sort(f,f+l,cmp); 45 for(i=0;i<l;i++) 46 { 47 if(__gcd(f[i][0],f[i][1])==1) cout<<f[i][0]<<"/"<<f[i][1]<<endl; 48 } 49 return 0; 50 }