88 顺序的分数
作者: xxx时间限制: 1S章节: 结构体
问题描述 :
输入一个自然数N,请写一个程序来增序输出分母小于等于N的既约真分数(即无法再进行约分的小于1的分数)
输入说明 :
单独的一行,一个自然数N(1…20)
输出说明 :
每个分数单独占一行
按照分数大小升序排列
对于分子为0的分数,仅输出0/1,不输出其它分母的分数,比如0/2, 0/3。
输入范例 :
4
输出范例 :
0/1
1/4
1/3
1/2
2/3
3/4
解答思路:
注意可约分是指有公因子。
AC代码
#include <cstdio>
#include <cstring>
int yue(int x,int y)
{
int min;
if(x<y)
{
min=x;
}
else
{
min=y;
}
for(int i=2;i<=min;i++)
{
if(x%i==0&&y%i==0)
{
return 0;
}
}
return 1;
}
struct fenshu{
int zi;
int mu;
};
void sort(fenshu a[],int r)
{
for(int i=0;i<r-1;i++)
{
for(int j=0;j<r-1-i;j++)
{
if(double(a[j].zi)/double(a[j].mu)>double(a[j+1].zi)/double(a[j+1].mu))
{
int temzi=a[j].zi,temmu=a[j].mu;
a[j].zi=a[j+1].zi;
a[j].mu=a[j+1].mu;
a[j+1].zi=temzi;
a[j+1].mu=temmu;
}
}
}
}
int main(){
int n;
while(~ scanf("%d",&n))
{
if(n)
{
printf("0/1\n");
}
int r=0;
fenshu a[500];
for(int i=1;i<n;i++)
{
for(int j=n;j>i;j--)
{
if(yue(i,j)!=0||i==1)
{
a[r].mu=j;
a[r].zi=i;
r++;
}
}
}
sort(a,r);
for(int i=0;i<r;i++)
{
printf("%d/%d\n",a[i].zi,a[i].mu);
}
}
}