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

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

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

Time Limit: 10 ms Memory Limit: 600 KiB

SubmitStatistic

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

Hint

 

Source

#include<stdio.h>
#include<stdlib.h>
struct hh
{
    int a;
    int b;
    struct hh *next;
};
int main()
{
    int n,k;
    struct hh *head,*p,*t,*p1,*p2;
    scanf("%d",&n);
    head=(struct hh *)malloc(sizeof(struct hh));
    head->next=NULL;
    t=head;
    p=(struct hh *)malloc(sizeof(struct hh));
    p->a=0;
    p->b=1;
    p->next=t->next;
    t->next=p;
    t=p;
    p=(struct hh *)malloc(sizeof(struct hh));
    p->a=1;
    p->b=1;
    p->next=t->next;
    t->next=p;
    t=p;
    k=1;
    while(k==1)
    {
        p1=head->next;
        p2=p1->next;
        p=NULL;
        while(p2!=NULL)
        {
            if((p1->b+p2->b)<=n)
            {
                p=(struct hh *)malloc(sizeof(struct hh));
                p->a=p1->a+p2->a;
                p->b=p1->b+p2->b;
                p->next=p1->next;
                p1->next=p;
            }
            p1=p2;
            p2=p2->next;
        }
        if(p==NULL)
            k=0;
    }
    k=0;
    p=head->next;
    while(p!=NULL)
    {
        k++;
        if(k<10)
            printf("%d/%d\t",p->a,p->b);
        else if(k==10)
        {
            printf("%d/%d\n",p->a,p->b);
            k=0;
        }
        p=p->next;
    }
    return 0;
}


相关文章
|
1月前
|
存储 缓存 算法
数据结构-链表(一)
链表(Linked List)是一种常见的数据结构,用于存储和组织数据。与数组不同,链表的元素(节点)在内存中不必连续存储,而是通过指针链接在一起。 链表由多个节点组成,每个节点包含两部分:数据(存储实际的元素值)和指针(指向下一个节点的引用)。链表的第一个节点称为头节点,最后一个节点称为尾节点,尾节点的指针通常指向空值(null)。
31 1
|
1月前
|
存储 C++
数据结构第六弹---带头双向循环链表
数据结构第六弹---带头双向循环链表
|
1月前
|
存储
【单链表】数据结构单链表的实现
【单链表】数据结构单链表的实现
|
1月前
|
C++
从0开始回顾数据结构---链表与堆
#include <iostream> #include <algorithm> #include <string.h> using namespace std; const int N = 100010; int h[N], ph[N], hp[N], cnt; void heap_swap(int a, int b) { swap(ph[hp[a]],ph[hp[b]]); swap(hp[a], hp[b]); swap(h[a], h[b]); } void down(int u) { int t = u; if (u * 2 <= cnt &&
|
1月前
|
存储
【数据结构】双向带头循环链表的实现
【数据结构】双向带头循环链表的实现
|
1月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
1月前
|
存储 缓存 算法
数据结构从入门到精通——链表
链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的一个显著特点是,它不需要在内存中连续存储,因此可以高效地插入和删除节点。这种灵活性使得链表在许多应用中成为理想的选择,尤其是在需要动态调整数据结构大小的场景中。
72 0
|
1月前
|
存储
数据结构——lesson4带头双向循环链表实现
数据结构——lesson4带头双向循环链表实现
|
1月前
数据结构——链表OJ题
数据结构——链表OJ题
|
3天前
|
存储 C语言
数据结构基础:双链表结构、实现
数据结构基础:双链表结构、实现