数据结构实验之链表八: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
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct each
{
int up;
int down;
each *next;
}listNode;
void listCreate(listNode *&L,int n)
{
L = (listNode *)malloc(sizeof(listNode));
L->next = NULL;
L->up = 0;
L->down = 1;
listNode *tail = (listNode *)malloc(sizeof(listNode));
tail->up = 1;
tail->down = 1;
tail->next = NULL;
L->next = tail;
for(int i = 2;i<=n;i++)
{
listNode *p;
p = L;
while(p->next)
{
if(p->down+p->next->down<=i)
{
listNode *key;
key = (listNode *)malloc(sizeof(listNode));
key->down = p->down + p->next->down;
key->up = p->up+p->next->up;
key->next = p->next;
p->next = key;
}
else
{
p = p->next;
}
}
}
}
void printList(listNode *L)
{
int count = 0;
listNode *p = L;
while(p)
{
if(count==0)
{
cout<<p->up<<"/"<<p->down;
count++;
}
else if(count%9==0)
{
cout<<"\t";
cout<<p->up<<"/"<<p->down;
count = 0;
cout<<"\n";
}
else
{
cout<<"\t";
cout<<p->up<<"/"<<p->down;
count++;
}
p = p->next;
}
}
int main()
{
int n;
listNode *L;
cin>>n;
listCreate(L,n);
printList(L);
return 0;
}