Time Limit: 10 second

Memory Limit: 2 MB

问题描述

     对任意给定的一个自然数n(n<=100),将分母小于等于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阶法雷序列,每行输出10个分数。

Input

输入为一个正整数n

Output

输出若干行,每行10个分式。(每个分式用空格隔开,为简化输出,每行的最后一个分式后也有一个空格,最后用换行结束)

Sample Input

    8

Sample Output

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
 

【题解】

真分数可以根据两个数是否互质来判断,或者换个说法,两个数的最大公因数是否为1,如果为1就互质。然后用一个结构来存储 分数的分子和分母,这里同时还要存储这个分数的小数形式。因为我们要根据小数来排序。在排序的时候,把整个结构都交换。在排序之前再加入一个0/1 1/1到数组里就好。两个数互质就加入这个结构数组。

【代码】

#include <cstdio>

struct fln

{
int fs[2];
double xs;
}; int n,num = 0;
fln bb[20000]; int gcd(int a,int b) //获取两个数的最大公因数
{
if (b == 0)
return a;
else
return gcd(b,a % b); } void input_data()
{
scanf("%d",&n);
} void get_ans()
{
for (int i = 1;i <= n;i++)
for (int j = i+1;j <= n;j++) //获取i和j 即i/j ,其中i < j,且i,j互质
if (gcd(i,j) == 1)
{
num++;
bb[num].fs[0] = i; //fs代表分数
bb[num].fs[1] = j;
double aa = (double) i;
double cc = (double) j;
double temp = aa / cc;
bb[num].xs = temp; //记录小数
}
bb[++num].fs[0] = 0; //把 0/1 和 1/1加入数组中.
bb[num].fs[1] = 1;
bb[num].xs =0.0;
bb[++num].fs[0] = 1;
bb[num].fs[1] = 1;
bb[num].xs = 1.0;
} void kp(int l,int r) //以小数作为元素 进行快排。
{
int i = l,j = r;double m = bb[(i+j)/2].xs;
do
{
while (bb[i].xs < m) i++;
while (m < bb[j].xs) j--;
if (i <= j)
{
int m; //要整个交换 这一段可以写成 fln m m = bb[i];bb[i] = bb[j];bb[j] = m,这样会短很多.
m = bb[i].fs[0];bb[i].fs[0] = bb[j].fs[0];bb[j].fs[0] = m;
m = bb[i].fs[1];bb[i].fs[1] = bb[j].fs[1];bb[j].fs[1] = m;
double tt;
tt = bb[i].xs;bb[i].xs = bb[j].xs;bb[j].xs = tt;
i++;j--;
}
}
while (i <= j);
if (l < j) kp(l,j);
if (i < r) kp (i,r);
} void output_ans()
{
int m = 0;
for (int i = 1;i <= num;i++) //控制一下输出
{
printf("%d/%d ",bb[i].fs[0],bb[i].fs[1]);
m++;
if (m == 10)
{
printf("\n");
m = 0;
}
}
} int main()
{
input_data();
get_ans();
kp(1,num);
output_ans();
return 0;
}

【7001】n阶法雷序列的更多相关文章

  1. 【USACO 2.1.2】法雷序列

    [问题描述]     对任意给定的一个自然数 n(n<=160), 将分母小于等于 n 的不可约的真分数按上升的次序排序 , 并且在第一个分数前加上 0/1, 而在最后一个分数后加上 1/1, ...

  2. 5阶m序列

    void echo32(int m) { printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n ...

  3. 小数化分数的O(log2n)解法

    具体约束: 给定一个小数x,x满足0<=x<1,且保证给定的x保留了18位小数 输出一个分数,使得分母不超过1e9,分子分母互质,且在满足这些条件的情况下最接近x 了解一下法雷数列和ste ...

  4. 数字信号处理MATLAB简单序列

    数字信号处理应用的几个基本序列: 1 单位样本序列 function mainImseq() clc clear disp('生成抽样序列'); y=imseq(,,); %调用样本函数,此时序列下标 ...

  5. m序列

    产生m序列移位寄存器是一种逻辑电路,1阶,2阶...的电路图各不相同. 一般使用本原多项式计算出各阶数电路图. 一般的多项式为 f(x) = c0 * x^0 + c1 * x^1 + c2 * x^ ...

  6. 在matlab中生成m序列

    实验环境为matlab2013b 1.首先编写一个mseq.m文件,内容为: function[mseq]=m_sequence(fbconnection)  n=length(fbconnectio ...

  7. 【经典面试题】实现平方根函数sqrt

    本文将从一道经典的面试题说起:实现平方根函数,不得调用其它库函数. 函数原型声明例如以下: double Sqrt(double A); 二分法 二分法的概念 求,等价于求方程的非负根(解).求解方程 ...

  8. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of SPb

    A. Base $i - 1$ Notation 两个性质: $2=1100$ $122=0$ 利用这两条性质实现高精度加法即可. 时间复杂度$O(n)$. #include<stdio.h&g ...

  9. hdu-1121(差分法--数学问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1121 参考文章:https://blog.csdn.net/fengzhizi76506/articl ...

随机推荐

  1. springboot整合Beetl、BeetlSql实现ajax分页

    Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎.而且还易学易用. BeetSql是一个 ...

  2. maven 遇到failOnMissingWebXml有关问题解决方法

    (转自) http://blog.csdn.net/liuvlun/article/details/50218507

  3. Tomcat之虚拟主机配置以及web应用配置

    Tomcat之虚拟主机配置以及web应用配置 Tomcat文件夹结构例如以下: bin ---- 启动和关闭须要的bat文件所在的文件夹 conf --- 配置文件夹 lib ---  tomcat执 ...

  4. Oracle Sqlplus中上下键出现^[[A乱码问题

    安装rlwrap  下载:http://utopia.knoware.nl/~hlub/uck/rlwrap/ 或者 百度云盘:http://pan.baidu.com/s/1ntM8YXr 须要先安 ...

  5. Android学习笔记进阶十三获得本地全部照片

    这是Intent的一个用法. 在ActivityAction里面有一个“ACTION_GET_CONTENT”字符串常量,该常量让用户选择特定类型的数据. intent.setType("i ...

  6. Zabbix监控,Mysql,Nginx,PHP-FTPM

    一 Zabbix监控Mysql 监控Mysql,Zabbix提供了一个监控模板,所有可以直接使用.或者使用Percona提供的监控模板. 1. 使用自带监控模板 1.1.1 编写监控模板 #!/bin ...

  7. 关于大数据项目创建时所需setting.xml(博主推荐)

    我目前,收录经常用的是,这两个版本,这个根据博主我本人的经验之谈,最为稳定和合理的. 注意:我的本地路径是在D:/SoftWare/maven/repository,大家自己改为你们自己的即可.   ...

  8. 【arc062e】Building Cubes with AtCoDeer

    Description STL有n块瓷砖,编号从1到n,并且将这个编号写在瓷砖的正中央: 瓷砖的四个角上分别有四种颜色(可能相等可能不相等),并且用Ci,0,Ci,1,Ci,2,Ci,3分别表示左上. ...

  9. 支付宝支付Java后台总结

    这个支付的流程是前端H5(APP等)需要支付时调用后台的接口拿到我们加密的签名去调起支付宝的支付界面(支付宝APP)进行支付操作,并且前端在支付成功后,支付宝后台会回调一个我们在签名时写入的一个接口地 ...

  10. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...