Home | ProblemSet | Standing | Status | Statistics |
Problem K: 分数类之四
Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 197 Solved: 125
[Submit][Status]
Description
一个分数类(Fraction)对象由两部分组成,分别是分子(numerator)和分母(denominator)。分子和分母均为整数类(Integer)对象,用以存储一个整型数值。
NumArray类是一个模板数组类,用以存储Integer对象或Fraction对象。NumArray::sort()函数可以按照Integer对象或Fraction对象的数值从小到大进行排序。
用C++编写Fraction类和Integer类来完成代码,调用格式见“Append Code”。
Fraction::numerator()取得分子数值。
Fraction:: denominator ()取得分母数值。
Integer::value()取得整数值。
Fraction类和Integer类的构造函数,根据题意设计。
Input
输入为两部分。第一部分首先输入整数i,后接i个整数,存入i个Integer对象。第二部分首先输入整数j,后接j对整数n和d,n为分子、d为分母,存入j个Fraction对象,并且输入中不存在数值完全相同的Fraction对象。i、j均小于100大于0.
Output
按从小到大的顺序分别输出所有整数和所有分数。
Sample Input
7 4 9 6 7 5 8 3 6 5 3 3 5 1 2 2 1 4 7 7 4
Sample Output
3 4 5 6 7 8 9 1/2 4/7 3/5 5/3 7/4 2/1
HINT
Append Code
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Integer
{public:
int x;
Integer(){}
Integer(int nn):x(nn){}
Integer(Integer& dd){this->x=dd.x;}
Integer& operator=(int n){this->x=n;return *this;}
int value()
{return x;}
};
class Fraction
{public:
Integer n,d;//分子、分母
Fraction(Integer nn,Integer dd):n(nn),d(dd){}
Fraction(Fraction& k){this->n=k.n;this->d=k.n;}
Fraction(){}
Integer& numerator(){return n;}
Integer& denominator(){return d;}
double value(){return (double)1.0*n.x/d.x;}
};
template<typename T>
class NumArray
{public:
T a[120];
int len;
void set_length(int n){len=n;}
T& operator[](int x){return a[x];}
int length(){return len;}
void sort()
{
for(int ii=0;ii<len-1;ii++)
for(int jj=ii+1;jj<len;jj++)
{
if(a[ii].value()>a[jj].value())
{T aa;
aa=a[ii];a[ii]=a[jj];a[jj]=aa;
}
}
}
};
int main()
{
NumArray<Integer> ia;
NumArray<Fraction> fa;
int cases, n, d;
cin >> cases;
for(int i = 0; i < cases; i++)
{
cin >> n;
ia[i] = n;
}
ia.set_length(cases);
cin >> cases;
for(int i = 0; i < cases; i++)
{
cin >> n >> d;
Integer num(n), den(d);
Fraction f(num, den);
fa[i] = f;
}
fa.set_length(cases);
ia.sort();
fa.sort();
for(int i = 0; i < ia.length(); i++)
cout << ia[i].value() << " ";
cout << endl;
for(int i = 0; i < fa.length(); i++)
cout << fa[i].numerator().value() << "/" << fa[i].denominator().value() << " ";
cout << endl;
}