Ordered Fractions

  贪心,从小到大依次考虑每一个分母 denominator ,对每一个分母再考虑每一个分子 numerator ,若gcd(nu,d)=1,则是真分数,输出。否则continue.

#include<cstdio> #include<iostream> #include<fstream> #include<algorithm> #include<string> #include<assert.h> #include<string.h> using namespace std; #define N 161 int n; struct frac{ int nu,d; }f[13041]; int cnt; bool cmp(frac const &a,frac const &b){ return a.nu*1.0/a.d<b.nu*1.0/b.d; } int gcd(int a,int b){ if(!b)return a; return gcd(b,a%b); } void getFactions(){ cnt=0; f[cnt].nu=0;f[cnt].d=1; cnt++; f[cnt].nu=1;f[cnt].d=1; cnt++; int i,j; for(i=2;i<=n;i++){ for(j=1;j<i;j++){ if(gcd(i,j)==1){ f[cnt].nu=j; f[cnt++].d=i; } } } } int main(){ freopen("frac1.in","r",stdin); freopen("frac1.out","w",stdout); cin>>n; getFactions(); sort(f,f+cnt,cmp); int i; for(i=0;i<cnt;i++){ cout<<f[i].nu<<'/'<<f[i].d<<endl; } return 0; }

你可能感兴趣的:(Ordered Fractions)