SDUT-3331_数据结构实验之链表八:Farey序列

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

Time Limit: 10 ms Memory Limit: 600 KiB

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个分数,同一行的两个相邻分数间隔一个制表符的距离。

Sample Input

6

Sample 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 <string.h>
#include <stdlib.h>

typedef struct node
{
    int num1,num2;
    struct node *next;
}link;

link *newlink()
{
    link *t;
    t = (link*)malloc(sizeof(link));
    t->next = NULL;
    return t;
}

link *create(int n)
{
    int i;
    link *head,*p,*q,*r;
    head = newlink();
    for(i=1;i<=n;i++)
    {
        if(i==1)
        {
            p = newlink();
            p->next = NULL;
            p->num1 = 0;
            p->num2 = 1;
            head->next = p;
            p = newlink();
            p->next = NULL;
            p->num1 = 1;
            p->num2 = 1;
            head->next->next = p;
        }
        else
        {
            p = head->next;
            while(p->next)
            {
                q = p->next;
                if(p->num2+q->num2<=i)
                {
                    r = newlink();
                    r->num1 = p->num1 + q->num1;
                    r->num2 = p->num2 + q->num2;
                    r->next = p->next;
                    p->next = r;
                }
                p = p->next;
            }
        }
    }
    return head;
}

void show(link *head)
{
    link *p;
    int k = 1;
    p = head->next;
    while(p)
    {
        printf("%d/%d",p->num1,p->num2);
        if(k%10==0||p->next==NULL)
            printf("
");
        else
            printf("	");
        k++;
        p = p->next;
    }
}

int main()
{
    int n;
    link *head;
    scanf("%d",&n);
    head = create(n);
    show(head);
    return 0;
}
原文地址:https://www.cnblogs.com/luoxiaoyi/p/9726735.html