题目描述
输入一个自然数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
解题思路:
看到题解时才注意到在重排列时前一个分母乘后一个分子要小于后一个分母乘以前一个分子,在写的时候,我给他转化为小数结果大错特错,交了好多遍找不出来问题
写着个题真是感到无语!!!
Accept Code
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
int x;
int y;
}s[20000];
bool cmp(node c,node d)
{
return d.y*c.x<c.y*d.x;
}
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int n,i,j,len=0;;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
if(gcd(i,j)==1)
{
s[len].x=i;
s[len].y=j;
len++;
}
}
sort(s,s+len,cmp);
printf("0/1\n");
for(i=0;i<len;i++)
printf("%d/%d\n",s[i].x,s[i].y);
printf("1/1\n");
return 0;
}