[题意]给出一个整数N,找出一组真分数,使得他们的分子分母都不大于N.以分数形式从小到大输出这组数。
[思路]不要想如何排序了,set解决!枚举所有分数,先判断是否最简,然后加入set中即可。
[代码]
#include<cstdio>
#include<iostream>
#include<set>
#include<string>
#include<cstdlib>
using namespace std;
struct haha
{
double num;
string str;
bool operator < (consthaha &a) const
{
return a.num>num;
}
}ha;
int main()
{
int n;cin>>n;
set<haha> se;
set<haha>::iterator it;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++){
if((i%j)>0||j==1){
char st[10];
char st2[10];
sprintf(st,"%d", j);
sprintf(st2,"%d", i);
ha.num=(double)j/(double)i;
strings=st;s=s+'/';s+=st2;
ha.str=s;
se.insert(ha);
}
}
cout<<"0/1"<<endl;
for(it=se.begin();it!=se.end();it++)
cout<<it->str<<endl;
cout<<"1/1"<<endl;
}