Ordered Fractions顺序的分数

来源:互联网 发布:淘宝李宁三号店 编辑:程序博客网 时间:2024/05/17 12:23

 Ordered Fractions顺序的分数
输入一个自然数 N  
请写一个程序来增序输出分母小于等于 N 的既约真分数
PROGRAM NAME: frac1
INPUT FORMAT
单独的一行  一个自然数 N(1..160)
SAMPLE INPUT (file frac1.in) 
5
OUTPUT FORMAT
每个分数单独占一行
SAMPLE OUTPUT (file frac1.out)
0/1
1/5
1/4
1/3 
2/5
1/2
3/5
2/3
3/4
4/5
1/1

=============================

生成数后先判断是否可行..

最后再排序..

=================

{ID:jie19952PROG:frac1LANG:PASCAL}type  re=record       s,m:longint;       v:real;     end;var  n:longint;  ans:array[1..25600]of re;  ans_s:longint;procedure init;begin  assign(input,'frac1.in');  assign(output,'frac1.out');  reset(input); rewrite(output);end;procedure terminate;begin  close(input); close(output);  halt;end;function gcd(a,b:longint):longint;begin  if b=0 then gcd:=a  else gcd:=gcd(b,a mod b)end;function pd(x,y:longint):boolean;begin  if gcd(x,y)=1 then exit(true);  exit(false);end;procedure qsort(s,t:longint);var  i,j:longint;  x:real;  tem:re;begin  x:=ans[(s+t)shr 1].v;  i:=s; j:=t;  repeat    while x<ans[j].v do dec(j);    while ans[i].v<x do inc(i);    if i<=j then      begin        tem:=ans[i];        ans[i]:=ans[j];        ans[j]:=tem;        inc(i); dec(j);      end;  until i>j;  if i<t then qsort(i,t);  if s<j then qsort(s,j);end;procedure main;var  i,j:longint;begin  readln(n);  writeln('0/1');  ans_s:=0;  for i:=1 to n-1 do    for j:=i+1 to n do      if pd(i,j) then        begin          inc(ans_s);          ans[ans_s].s:=i;          ans[ans_s].m:=j;          ans[ans_s].v:=i/j;        end;  qsort(1,ans_s);  for i:=1 to ans_s do    writeln(ans[i].s,'/',ans[i].m);  writeln('1/1');end;begin  init;  main;  terminate;end.