http://topic.youkuaiyun.com/u/20090530/19/912d79b3-f9d0-44d7-8bf5-2dc60be0a197.html
考虑在0和1之间的所有分母不大于N的最简分数,下面是N=5时的情况: 0/1, 1/5, 1/4 ,1/3 ,2/5 ,1/2 ,3/5, 2/3, 3/4 ,4/5, 1/1 .总共有11个分数。写出一个程序对于给定的整数N(1 <=N <=100),按从小到大的顺序打印出这些分数。还要打印出它们的总数。在每个分数后面打印出3个空格,使它们在显示的时候一行不会很长。
要求:当N <1或N>100时,程序应判错。
运行举例:
Please input the N?
5
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
There were 11 fractions.
这个序列叫法雷序列。
Farey Sequence 的构造
法雷数列的构造可采用2分法,即如果 a/b, c/d (a/b <c/d)是一个n级法雷数列中的两个元素,且b+d <=n, 则可以在a/b, c/d 中间插入一个分数 (a+b)/(c+d)。下面以5级法雷数列为例,给出详细的过程。
step1: 准备两个数 0/1, 1/1 作为整个法雷数列的第一个元素和最后一个元素
0/1, 1/1
step2: 在两个数中间插入1个数1/2, 变为
0/1, 1/2, 1/1
step3: 在每对相邻两个数中间插入1个数,变为
0/1, 1/3, 1/2, 2/3, 1/1
step4: 在每对相邻两个数中间插入1个数,变为
0/1, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 1/1
step5: 0/1 和 1/4 之间 和3/4和 1/1 仍然可插入1个数,使得插入的数分母不大于5
0/1, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1
至此,该序列包含了所有分母不大于5的最简真分数,且各个分数以递增顺序排列。