[USACO 2.1.2]顺序的分数

地址: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 }

 

posted @ 2013-01-29 22:30  tjsuhst  阅读(293)  评论(0编辑  收藏  举报