USACO 2.1.2 Ordered Fractions

题意:给定正整数N,输出分母小于等于N的“既约真分数”(就是分子分母互质的数)

 

解法:没发现跟graph有什么关系。。

后面的分析上给出的求解既约真分数的方法

bool rprime(int a, int b){
   int r = a % b;
   while(r != 0){
       a = b;
       b = r;
       r = a % b;
   }
   return(b == 1);
}

 

 

/*
ID: lsswxr1
PROG: frac1
LANG: C++
*/
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;

#define USACO
#ifdef USACO
#define cin fin
#define cout fout
#endif
//////////////////////////////////////////////////////////////////////////
///宏定义
const int  INF = 1000000000;
const int MAXN = 50001;
const int maxn = MAXN;
///全局变量 和 函数
int N;

struct node
{
    int up, down;
    double val;
    bool operator < (const node& T) const 
    {
        return val < T.val;
    }
};
node Nodes[maxn];
int main()
{
#ifndef USACO
    freopen("D:\\input.txt", "r", stdin);
#endif


    
    while (cin >> N)
    {
        int cnt = 0;
        Nodes[cnt].up = 0;
        Nodes[cnt].down = 1;
        Nodes[cnt].val = 0;
        cnt++;
        for (int i = 1; i <= N; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                if ((i == j) && (i != 1))
                    continue;
                bool flag = true;
                for (int k = 2; k <= j; k++)
                {
                    if ((i % k ==0) && (j % k ==0))
                    {
                        flag = false;
                        break;
                    }
                }
                if (!flag)
                    continue;
                Nodes[cnt].up = j;
                Nodes[cnt].down = i;
                Nodes[cnt].val = (double)j / (double)i;
                cnt++;
            }
        }
        sort(Nodes, Nodes + cnt);
        for (int i = 0; i < cnt; i++)
        {
            cout << Nodes[i].up << "/" << Nodes[i].down << endl;
        }
        
    }
    
    ///结束
    return 0;
}

 

posted on 2014-01-17 15:46  小书包_Ray  阅读(181)  评论(0编辑  收藏  举报

导航