zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9726735.html
Copyright © 2011-2022 走看看