zoukankan      html  css  js  c++  java
  • 【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.

    注意细节就好了。

    我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。
  • 相关阅读:
    JavaScript--正则
    PHP-xdebug+PHPStorm的debug安装(未完)
    JavaScript--函数对象的属性caller与callee
    JavaScript--数组与伪数组(特殊对象)的区别
    【原理】scan
    【原理】Reids字典
    【Guava】Guava Cache用法
    【Nginx】缓存配置
    【劫持】网页被注入广告
    【架构】Linux结构
  • 原文地址:https://www.cnblogs.com/RainbowCrown/p/11148473.html
Copyright © 2011-2022 走看看