题意:
输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数。
这有一个例子,当N=5时,所有解为:
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
给定一个自然数N,1<=n<=160,请编程按分数值递增的顺序输出所有解。
思路:
调用函数,直接枚举
#include <iostream>
#include <stdio.h>
#include <queue>
#include <math.h>
#include <string.h>
#include <algorithm>
using namespace std;
int n,cnt;
struct node
{
int x;
int y;
}num[10000];
int cmp(node a,node b)
{
return (double)a.x/a.y < (double)b.x/b.y;
}
int gcd(int x,int y)
{
return y == 0 ? x : gcd(y,x%y);
}
void init()
{
cnt = 0;
int i,j;
for(i = 0;i <= n; i++)
for(j = 0;j <= i; j++)
{
int a = j,b = i;
if(gcd(a,b) == 1)
{
num[cnt].x= a;
num[cnt].y= b;
cnt++;
}
}
}
int main()
{
// freopen("frac1.in","r",stdin);
// freopen("frac1.out","w",stdout);
cin>>n;
init();
sort(num,num+cnt,cmp);
for(int i = 0;i < cnt; i++)
cout<<num[i].x<<"/"<<num[i].y<<endl;
return 0;
}