【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.
注意细节就好了。
我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。