题目描述
输入一个自然数N
请写一个程序来增序输出分母小于N的既约真分数
输入
单独的一行 一个自然数N
输出
每个分数单独占一行
样例输入
5
样例输出
0/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1
题目分析:这道题唯一注意的就是第一个值跟第最后一个数是自己单独输出的。
解题思路:把所有满足基约真分数的分子分母找到,并且将结果保留下来,最后将结果排序,循环输出分子分母。
另外强调就是既约分数是分子分母不能在约分,也就是最简分数。
AC代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
return b==0? a:gcd(b,a%b);
}
struct node
{
int fz;
int fm;
double jg;
}q[20000];
double cmp(node a,node b)
{
return a.jg<b.jg;//将结果按从小到大排序
}
int main()
{
int i,j,n,k;
while(~scanf("%d",&n))
{
k=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
if(gcd(i,j)==1)
{
q[k++].fz=i;
q[k-1].fm=j;
q[k-1].jg=i*1.0/j;
}
}
sort(q,q+k,cmp);
printf("0/1\n");
for(i=0;i<k;i++)
printf("%d/%d\n",q[i].fz,q[i].fm);
printf("1/1\n");
}
return 0;
}