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

来源:互联网 发布:不敢在淘宝上刻公章 编辑:程序博客网 时间:2024/06/12 22:49

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

#include <stdio.h>#include <stdlib.h>typedef int elemtype;typedef struct lnode{    elemtype a,b;    struct lnode *next;} lnode,*linklist;void creat(linklist head,int n){    lnode *t,*p,*q;    p=head->next;    while(p->next)    {        q=p->next; //总为p的后继        if((p->b+q->b)<=n)        {            t=new lnode;            t->a=p->a+q->a;            t->b=p->b+q->b;            t->next=p->next;            p->next=t;        }        p=p->next;    }}void output(linklist head){    int num=1;    lnode *p;    p=head->next;    while(p)    {        if(num%10!=0)        {            printf("%d/%d\t",p->a,p->b);        }        else        {            printf("%d/%d\n",p->a,p->b);        }        p=p->next;        num++;    }}int main(){    int n;    lnode *head,*p,*q;    head=new lnode;    head->next=NULL;    p=new lnode;    q=new lnode;    p->a=0;    p->b=1;    q->a=1;    q->b=1;    head->next=p;    p->next=q;    q->next=NULL;    scanf("%d",&n);    for(int i=2; i<=n; i++)    {        creat(head,i);    }    output(head);    return 0;}
原创粉丝点击