【USACO题库】2.1.2 Ordered Fractions顺序的分数.tj

题目描述
输入一个自然数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
TJ:
此题问题描述很简单,然后也很容易看懂。
就是要把1~n个数字组成a lot of分数,然后把分数从小到大输出(不能有重复)
此题很水,是新手们的福利,呵呵。
首先,用一个双重循环来把所有的分数枚举出来,然后把它改成最简真分数。
再用一个数组,来吧它们的结果算出来,在来排序,a。
程序:

var
        i,j,k,l,n,m,x,y,p3:longint;
        bz:boolean;
        a:array[0..10000,1..3] of real;
procedure gc(dep:longint);
var
        i,j,k,l,ans,p2,p1:longint;
        a:array[1..1000] of longint;
begin
        if dep=7000 then
        begin
                inc(ans);
        end
        else
        begin
                for i:=1 to n do
                if (dep+p2>=a[i]) and (dep+p1<=a[i]) then
                begin
                        dep:=dep+1;
                        gc(a[i]);
                end;
        end;
end;
function max(a,b:longint):longint;
begin
        if a>b then exit(a) else exit(b);
end;
begin
        readln(n);
        writeln('0/1');
        for i:=1 to n do
        begin
                for j:=i+1 to n do
                begin
                        for k:=2 to n do
                        begin
                                bz:=true;
                                if (i mod k=0) and (j mod k=0) then
                                begin
                                        bz:=false;
                                        break;
                                end;
                        end;
                        if bz=true then
                        begin
                                inc(p3);
                                a[p3,1]:=i/j;
                                a[p3,2]:=i;
                                a[p3,3]:=j;
                        end;
                end;
        end;
        for i:=1 to p3-1 do
        begin
                for j:=i+1 to p3 do
                begin
                        if a[i,1]>a[j,1] then
                        begin
                                a[0]:=a[i];
                                a[i]:=a[j];
                                a[j]:=a[0];
                        end;
                end;
        end;
        for i:=1 to p3 do
        begin
                writeln(a[i,2]:0:0,'/',a[i,3]:0:0);
        end;
        writeln('1/1');
end.

注意细节就好了。

posted @ 2016-10-07 07:49  RainbowCrown  阅读(515)  评论(0编辑  收藏  举报