zoukankan      html  css  js  c++  java
  • 【USACO 2.1.2】法雷序列

    【问题描述

        对任意给定的一个自然数 n(n<=160), 将分母小于等于 n 的不可约的真分数按上升的次序排序 , 并且在第一个分数前加上 0/1, 而在最后一个分数后加上 1/1, 这个序列称为 n 级法雷序列 , 以 Fn 表示 . 例如 ,F8 为 :
    0/1,1/8,1/7,1/6,1/5,1/4,2/7,1/3,3/8,2/5,3/7,1/2,4/7,3/5,5/8,2/3,5/7,3/4,4/5,5/6,6/7,7/8,1/1.

    编程求出 n 级法雷序列 , 每行输出 1 个分数 .

    【输入格式】

        输入只有一行,一个整数n(1≤n≤160);

    【输出格式】

        输出有若干行,每行一个分数。

    【分析】

    直接枚举就行了,注意判重,排序的时候注意分数处理。

     1 #include <cstdlib>
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <cmath>
     6 #include <queue>
     7 #include <algorithm>
     8 const int maxn=160+10;
     9 using namespace std;
    10 struct Ans
    11 {
    12        int fz,fm;
    13        bool operator < (const Ans&b)const
    14        {
    15             return double((double)fz/fm)<(double)((double)b.fz/b.fm);
    16        }
    17 }ans[maxn*maxn];
    18 bool hash[maxn][maxn];
    19 int gcd(int a,int b) {return b==0?a:gcd(b,a%b);}
    20 int main()
    21 {
    22     int n,i,j,point=0;
    23     //文件操作
    24     freopen("frac1.in","r",stdin);
    25     freopen("frac1.out","w",stdout);  
    26     printf("0/1
    ");
    27     scanf("%d",&n);
    28     for (i=1;i<=n;i++)
    29     for (j=i+1;j<=n;j++)
    30     {
    31         int a=i,b=j,temp=gcd(i,j);
    32         a=a/temp;b=b/temp;
    33         if (hash[a][b]==0)
    34         {
    35             hash[a][b]=1;
    36             ans[point].fz=a;ans[point++].fm=b;
    37         }
    38     }
    39     sort(ans,ans+point);
    40     for (i=0;i<point;i++) printf("%d/%d
    ",ans[i].fz,ans[i].fm);
    41     printf("1/1
    ");
    42     return 0;
    43 }
  • 相关阅读:
    CSP2020 游记
    关于对拍
    联考day7
    CSP 模拟26
    动态规划
    JAVA单元测试的用法和要点(入门篇)
    乐观锁和悲观锁的区别
    并发基础篇(六):线程Thread类的start()方法和run()方法【转载】
    this和super差异
    Java中的static关键字解析
  • 原文地址:https://www.cnblogs.com/hoskey/p/3788626.html
Copyright © 2011-2022 走看看