zoukankan      html  css  js  c++  java
  • 顺序的分数 Ordered Fractions

    题目描述

    输入一个自然数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,请编程按分数值递增的顺序输出所有解。

    注:①0和任意自然数的最大公约数就是那个自然数②互质指最大公约数等于1的两个自然数。

    输入输出格式

    输入格式:
    单独的一行一个自然数N(1…160)

    输出格式:
    每个分数单独占一行,按照大小次序排列

    输入输出样例

    输入样例#1:
    5

    输出样例#1:
    0/1
    1/5
    1/4
    1/3
    2/5
    1/2
    3/5
    2/3
    3/4
    4/5
    1/1

    .
    .
    .
    .
    .
    .
    分析
    先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出。
    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    struct node
    {
    	int x,y;
    }s[30000];
    
    int gcd(int a,int b)
    {
    	if (a==0)
    	{
    		if (b==1) return 1; else return 0;
    	}
    	return gcd(b%a,a);
    }
    
    bool cmp(node a,node b)
    {
    	a.x=a.x*b.y;
    	b.x=b.x*a.y;
    	return a.x<b.x;
    }
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	int l=0;
    	for (int i=1;i<=n;i++)
    	{
    		if (i==1)
    		{
    			s[l].x=0;
    			s[l++].y=1;	
    		}
    		for (int j=1;j<=i;j++)
    			if (gcd(i,j))
    			{
    				s[l].x=j;
    				s[l++].y=i;
    			}
    	}
    	sort(s,s+l,cmp);
    	for (int i=0;i<l;i++)
    		printf("%d/%d
    ",s[i].x,s[i].y);
    	return 0;
    }
    
    
  • 相关阅读:
    爱摘苹果的小明
    盗梦空间
    九九乘法表
    谁是最好的Coder
    画图
    黑色帽子
    a letter and a number
    运维开发面试题
    python 守护进程daemon
    kubernets 应用部署
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/10292805.html
Copyright © 2011-2022 走看看