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

来源:互联网 发布:新发行的人工智能基金 编辑:程序博客网 时间:2024/06/11 09:55

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

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

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

Hint

 

Author

 
#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;struct link{    int a,b;    link*next;};void show(link*head);void Insert(link*head,int n);int main(){    link *p,*q, *head;    head=new link;    head->next=NULL;    int n;    cin>>n;    p=new link;    q=new link;    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++)    {        Insert(head,i);    }    show(head);    return 0;}void Insert(link*head,int i){    link *p,*q,*r;    p=head->next;    while(p->next!=NULL)    {        q=p->next;        if(p->b+q->b<=i)//注意传递过来的参数不是n,而是i        {            r=new link;            r->a=p->a+q->a;            r->b=p->b+q->b;            p->next=r;            r->next=q;        }        p=p->next;    }}void show(link*head){    int num=0;    link*p;    p=head->next;    while(p!=NULL)    {        ++num;        if(num%10==0)        {             printf("%d%c%d\n",p->a,'/',p->b);        }        else        {            printf("%d%c%d\t",p->a,'/',p->b);//制表符用\t表示        }        p=p->next;    }}



原创粉丝点击