数据结构实验之链表八:Farey序列

来源:互联网 发布:java讲师技术含量 编辑:程序博客网 时间:2024/04/29 03:46

数据结构实验之链表八:Farey序列

Time Limit: 10MS Memory Limit: 600KB
Submit Statistic

Problem Description

Farey序列是一个这样的序列:其第一级序列定义为(0/1,1/1),这一序列扩展到第二级形成序列(0/1,1/2,1/1),扩展到第三极形成序列(0/1,1/3,1/2,2/3,1/1),扩展到第四级则形成序列(0/1,1/4,1/3,1/2,2/3,3/4,1/1)。以后在每一级n,如果上一级的任何两个相邻分数a/c与b/d满足(c+d)<=n,就将一个新的分数(a+b)/(c+d)插入在两个分数之间。对于给定的n值,依次输出其第n级序列所包含的每一个分数。

Input

输入一个整数n(0<n<=100)

Output

依次输出第n级序列所包含的每一个分数,每行输出10个分数,同一行的两个相邻分数间隔一个制表符的距离。

Example Input

6

Example Output

0/1   1/6   1/5   1/4   1/3   2/5   1/2   3/5   2/3   3/44/5   5/6   1/1

Author

#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{int a,b;struct node *next;}node;void creat(node *head,int n){node *p,*q,*tail;tail = head->next;while(tail->next != NULL){p = tail->next;if(p->b + tail->b <= n){q = (node *)malloc(sizeof(node));q->a = p->a + tail->a;q->b = p->b + tail->b;tail->next = q;q->next = p;}tail = tail->next;}}void pri(node *head){node *p;p = head->next;int t = 0;while(p){t++;if(t%10 == 0)printf("%d/%d\n",p->a,p->b);elseprintf("%d/%d\t",p->a,p->b);p = p->next;}}int main(){int n;node *head,*p,*q;scanf("%d",&n);head = (node *)malloc(sizeof(node));head->next = NULL;p = (node *)malloc(sizeof(node));q = (node *)malloc(sizeof(node));p->a = 0;p->b = 1;q->a = 1;q->b = 1;head->next = p;p->next = q;q->next = NULL;for(int i = 2;i <= n;i++){creat(head,i);}pri(head);return 0;}


0 0