USACO 2.1 Ordered Fractions (frac1)

/*
ID: haolink1
PROG: frac1
LANG: C++
*/

//#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>    // std::sort
using namespace std;

class Fraction{
public:
    short up_num_;
    short down_num_;
    Fraction(short up_num,short down_num):
        up_num_(up_num),down_num_(down_num){}
};

bool RelativelyPrime(short num1,short num2);
bool CompareValue(Fraction first, Fraction second);

int main(){
    ifstream fin("frac1.in");
    short num = 0;
    fin >> num;
    vector<Fraction> numbers;
    for(short i = 1; i < num; i++){
        for(short j = i+1; j <= num; j++){
            if(RelativelyPrime(i,j))
                numbers.push_back(Fraction(i,j));
        }
    }
    sort(numbers.begin(),numbers.end(),CompareValue);
    ofstream fout("frac1.out");
    fout<<"0/1"<<endl;
    int numbers_size = numbers.size();
    for(int i =0; i < numbers_size; i++)
        fout << numbers[i].up_num_<<'/'<<numbers[i].down_num_<<endl;
    fout<<"1/1"<<endl;
    return 0;
}
/*
bool RelativelyPrime(short num1,short num2){
    short min = num1 <= num2?num1:num2; 
    for(short i = 2; i <= min; i++){
        if(num1%i == 0 && num2%i == 0)
            return false;
    }
    return true;
}
*/
bool RelativelyPrime(short a, short b){
   int r = a % b;
   while(r != 0){
       a = b;
       b = r;
       r = a % b;
   }
   return(b == 1);
}
/*
bool CompareValue(Fraction first, Fraction second){
   if(float(first.up_num_)/first.down_num_ < float(second.up_num_)/second.down_num_) 
       return true;
   else return false;
}
*/
bool CompareValue(Fraction first, Fraction second){
     return first.up_num_*second.down_num_ - second.up_num_*first.down_num_ < 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值