USACO-2.1.2- Ordered Fractions

来源:互联网 发布:java urlencoder 空格 编辑:程序博客网 时间:2024/05/17 01:34

题目链接
题目大意
给定一个数字N,按照从小到大的顺序输出所有分母小于等于N的,小于1的真分数。
样例输入

样例输出
0/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1

解题思路
这道题的规模很小,可以直接遍历找出所有的分母小于等于N的真分数,排序后输出。
代码

/*ID: LANG: C++PROG: frac1*/#include <iostream>#include <fstream>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;struct frac{        int num, den;};bool coprime(int i, int j){        while( i % j != 0 )        {                int t = i % j;                i = j;                j = t;        }        if(j == 1)                return 1;        else                return 0;}bool fraccmp(const frac &a, const frac &b){        int val1, val2;        val1 = a.num * b.den;        val2 = a.den * b.num;        return (val1 < val2);}int main(){        ifstream fin("frac1.in");        ofstream fout("frac1.out");        int n;        struct frac ans[40000];        int count = 0;        fin >> n;        for(int i = 2; i <= n; ++i)        {                for(int j = 1; j < i; ++j)                {                        if( coprime(i, j) )                        {                                ans[count].num = j;                                ans[count].den = i;                                ++count;                        }                }        }        sort(ans, ans + count, fraccmp);        fout << "0/1" << endl;        for(int i = 0; i < count; ++i)        {                fout << ans[i].num << '/' << ans[i].den << endl;        }        fout << "1/1" << endl;        return 0;}
0 0