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

    P1458 顺序的分数 Ordered Fractions

      • 151通过
      • 203提交
    • 题目提供者该用户不存在
    • 标签USACO
    • 难度普及-

      讨论  题解  

    最新讨论

    • 暂时没有讨论

    题目描述

    输入一个自然数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
    

    说明

    USACO 2.1

    翻译来自NOCOW

    分析:看到N这么小,直接枚举这个分数,如果gcd==1记录下答案就可以了吧.排序的时候不要用除法,利用不等式的性质同时乘以两个分母得到的式子来排序即可,同时注意把0/1单独输出.

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int n,num;
    
    struct node
    {
        int a, b;
    }a[10000];
    
    int gcd(int a, int b)
    {
        if (!b)
            return a;
        return gcd(b, a % b);
    }
    
    bool cmp(node a, node b)
    {
        return a.a  * b.b < b.a * a.b;
    }
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            for (int j = i; j <= n; j++)
                if (gcd(i, j) == 1)
                {
            a[++num].a = i;
            a[num].b = j;
                }
        sort(a + 1, a + num + 1, cmp);
        printf("0/1
    ");
        for (int i = 1; i <= num; i++)
            printf("%d/%d
    ", a[i].a, a[i].b);
    
        return 0;
    }
  • 相关阅读:
    一次linux启动故障记录
    linux 时间相关的一些总结
    linux 3.10 gro的理解和改进
    linux 3.10 的中断收包笔记
    一个有趣的nginx问题引发的小问题
    linux 3.10 tcp的accept测试
    linux mce的一些相关内容和用户态监控的设计方法
    C/C++(基础-运算符详解)
    C/C++(基础-常量,类型转换)
    C/C++(基础编码-补码详解)
  • 原文地址:https://www.cnblogs.com/zbtrs/p/5902945.html
Copyright © 2011-2022 走看看