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

来源:互联网 发布:二分查找算法 编辑:程序博客网 时间:2024/04/29 12:12

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

Time Limit: 10MS Memory Limit: 600KB
Submit Statistic

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/44/5   5/6   1/1

Author

 

#include<bits/stdc++.h>using namespace std;struct node{    int a,b;    node *next;};void creat(node *head,int n){    node *t,*q;    t=head->next;    while (t->next!=NULL)    {        if (t->b+t->next->b<=n)        {            q=new node;            q->a=t->next->a+t->a;            q->b=t->next->b+t->b;        //    t->next=q;        //    q->next=p;            q->next=t->next;            t->next=q;        }        t=t->next;    }}void show(node *head){    node *t;    t=head->next;    int k=0;    while (t!=NULL)    {        k++;        if (k%10==0)            cout<<t->a<<"/"<<t->b<<endl;        else            cout<<t->a<<"/"<<t->b<<"\t";        t=t->next;    }}int main(){    ios::sync_with_stdio(false);    int n;    cin>>n;    node *head,*p,*q;    head=new node;    head->next=NULL;    p=new node;    q=new node;    p->a=0;    p->b=1;    q->a=1;    q->b=1;    head->next=p;    p->next=q;    q->next=NULL;    for (int i=2;i<=n;i++)    {        creat(head,i);    }    show(head);    return 0;}


0 0