88 顺序的分数

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

#include<stdio.h>
#include<memory.h>
struct num{
	int zi;
	int mu;
};
int fun(int n,int m){
	int i,temp;
	if(n>m){
		temp=n;
		n=m;
		m=temp;
	}
	if((n==1||n==0)&&m>1){
		return 1;
	}
	for(i=2;i<=n;i++){
		if(n%i==0&&m%i==0){
			return 0;
		}
	}
	return 1;
}
//选择排序
void sort(struct num a[],int len){
	double x,y;
	int tempFenzi,tempFenMu,min,i;
	for(i=0;i<len-1;i++){
		x=(double)(a[i].zi)/(double)(a[i].mu);
		min=i;
		for(int j=i+1;j<len;j++){
			y=(double)a[j].zi/a[j].mu;
			if(x>y){
				min=j;
				x=y;
			}
		}
		if(min!=i){
			tempFenzi=a[min].zi;
			tempFenMu=a[min].mu;
			a[min].zi=a[i].zi;
			a[min].mu=a[i].mu;
			a[i].zi=tempFenzi;
			a[i].mu=tempFenMu;
		}
	}

}

int main(){
	int n,i,j,len;
	struct num a[100];
	while(scanf("%d",&n)!=EOF){
		memset(a,0,sizeof(struct num)*100);
		len=0;
		if(n>1){
			a[len].zi=0;
			a[len].mu=1;
			len++;
		}
		for(i=1;i<n;i++){
			for(j=n;j>i;j--){
				if(fun(i,j)){
					a[len].zi=i;
					a[len].mu=j;
					len++;
				}
			}
		}
		sort(a,len);
		for(i=0;i<len;i++){
			printf("%d/%d\n",a[i].zi,a[i].mu);
		}
	}
	return 0;
}
发布了142 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39910081/article/details/104869341
88