您的位置:首页 > 理论基础 > 数据结构算法

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

2017-12-13 21:49 405 查看

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/4
4/5   5/6   1/1
#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{    int a, b;    struct node *next;};void creat(struct node *head, int n){    struct node *p, *q, *t, *r;    t = (struct node *)malloc(sizeof(struct node));    t = head->next;    while(t->next != NULL)    {        p = t;        q = p->next;        if(p->b + q->b <= n)        {            r = (struct node *)malloc(sizeof(struct node));            r->a = p->a + q->a;            r->b = p->b + q->b;            p->next = r;            r->next = q;        }        t = t->next;    }}void dis(struct node *head){    struct node *p;    int n = 0;    p = head->next;    while(p)    {        n++;        if(n % 10 == 0)        printf("%d/%d\n", p->a, p->b);        else        printf("%d/%d\t", p->a, p->b);        p = p->next;    }}int main(){    struct node *head, *p, *q;    int n, i;    scanf("%d", &n);    head = (struct node *)malloc(sizeof(struct node));    p = (struct node *)malloc(sizeof(struct node));    q = (struct node *)malloc(sizeof(struct node));    p->a = 0;    p->b = 1;    q->a = 1;    q->b = 1;    head->next = p;    p->next = q;    q->next = NULL;    for(i = 2; i <= n; i++)    {        creat(head, i);    }    dis(head);    return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: