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

来源:互联网 发布:通达信股票行情软件 编辑:程序博客网 时间:2024/05/21 04:22

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

Time Limit: 10MS Memory limit: 600K

题目描述

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级序列所包含的每一个分数。

输入

输入一个整数n(0

输出

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

示例输入

6

示例输出

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

提示

 

来源

 

示例程序

 

本题坑点,没两个元素之间是\t ,不是空行

#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>using namespace std;struct node{    int data1;    int data2;    node *next;}*head,*p,*q,*tail;int Chushi(){    p=new node;    p->next=NULL;    p->data1=0;    p->data2=1;    tail->next=p;    tail=p;    p=new node;    p->next=NULL;    p->data1=1;    p->data2=1;    tail->next=p;    tail=p;}int Insert(int n){p=head->next;tail=p->next;while(p){if(tail==NULL)break;if((p->data2+tail->data2)<=n){q=new node;q->data1=p->data1+tail->data1;q->data2=p->data2+tail->data2;q->next=p->next;p->next=q;tail=q;}else{p=p->next;tail=tail->next;}}}int display(){    int kk=1;    p=head->next;    int num=0;    while(p)    {        if(kk)            kk=0;        else            printf("\t");        num++;        printf("%d/%d",p->data1,p->data2);        p=p->next;        if(num==10)        {        num=0;            printf("\n");            kk=1;        }    }    if(num!=10)printf("\n");}int main(){    int n;    while(~scanf("%d",&n))    {        head=new node;        head->next=NULL;        tail=head;        Chushi();        if(n==1)            display();        else{Insert(n);display();}    }}



0 0
原创粉丝点击