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

来源:互联网 发布:个人域名转企业域名 编辑:程序博客网 时间:2024/06/06 07:50

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

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 <stdlib.h>#include <bits/stdc++.h>#include <algorithm>using namespace std;typedef struct list{   int data1, data2;   struct list *next;}nlist;int main(){    nlist *head, *last;    head=(nlist *)malloc(sizeof(nlist));    last=(nlist *)malloc(sizeof(nlist));    head->next=last;    head->data1=0;    head->data2=1;    last->next=NULL;    last->data1=1;    last->data2=1;    int n;    scanf("%d", &n);    int i=n;    n--;    nlist *mail=head;    while(n--)    {        mail=head;        while(mail->next)        {            if(mail->data2+mail->next->data2<=i)            {                nlist *p;                p=(nlist *)malloc(sizeof(nlist));                p->data1=mail->data1+mail->next->data1;                p->data2=mail->data2+mail->next->data2;                p->next=mail->next;                mail->next=p;            }            mail=mail->next;        }    }    mail=head;    int top=1;    int kk=0;    while(mail)    {        if(kk%10==0&&kk)printf("\n");        else if(top==1)top=0;        else printf("\t");        printf("%d/%d", mail->data1, mail->data2);        mail=mail->next;        kk++;    }    return 0;}
0 0