• usaco2.1Ordered Fractions( 枚举, 数学)


    这道题是给出一个n 求出分子分母<=n 且 gcd(u,d) = 1 ,  (u代表分子,d代表分母) 0<=u/d<=1

    常规方法就是枚举n平方个数字。。然后进行比较排序等。。看了解答后发现一种数学方法比较神奇。 代码也非常短,递归版本

    大致思路是 0/0  -------------------------1/1

          0/0  ----------1/2----------1/1

          0/0---1/4---1/2----2/3----1/1

    如此这样递归下去。。具体数学证明我就不搬运了。。

    题目:

    Ordered Fractions

    Consider the set of all reduced fractions between 0 and 1 inclusive with denominators less than or equal to N.

    Here is the set when N = 5:

    0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
    

    Write a program that, given an integer N between 1 and 160 inclusive, prints the fractions in order of increasing magnitude.

    PROGRAM NAME: frac1

    INPUT FORMAT

    One line with a single integer N.

    SAMPLE INPUT (file frac1.in)

    5
    

    OUTPUT FORMAT

    One fraction per line, sorted in order of magnitude.

    SAMPLE OUTPUT (file frac1.out)

    0/1
    1/5
    1/4
    1/3
    2/5
    1/2
    3/5
    2/3
    3/4
    4/5
    1/1
    

    代码:
     1 /*
     2 ID:doubles3
     3 PROB:frac1
     4 LANG:C++
     5 */
     6 #include<iostream>
     7 #include<cstdlib>
     8 #include<stdio.h>
     9 #include<fstream>
    10 #include<math.h>
    11 #include <algorithm>
    12 #include<string.h>
    13 #include<string>
    14 #include<vector>
    15 #include <queue>
    16 #include <set>
    17 using namespace std;
    18 
    19 int N;
    20 
    21 int print(int au,int ad,int bu,int bd)
    22 {
    23     if(ad+bd<=N)
    24     {
    25         print(au,ad,au+bu,ad+bd);
    26         cout<<au+bu<<"/"<<ad+bd<<endl;
    27         print(au+bu,ad+bd,bu,bd);
    28     }
    29     else
    30         return 0;
    31 }
    32 
    33 int main()
    34 {
    35     freopen("frac1.in","r",stdin);
    36     freopen("frac1.out","w",stdout);
    37 
    38     cin>>N;
    39 
    40     cout<<"0/1"<<endl;
    41     print(0,1,1,1);
    42     cout<<"1/1"<<endl;
    43 
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    反悔贪心 学习笔记
    「CF901C」Bipartite Segments 题解
    「HEOI2015」公约数数列 题解
    拓展欧拉定理
    莫比乌斯反演题目选做
    八月水题录
    chapt15、使用虚拟内存
    chapt16、线程堆栈
    chapt14、探索虚拟内存
    get files version by vbs
  • 原文地址:https://www.cnblogs.com/doubleshik/p/3543660.html
Copyright © 2020-2023  润新知