2000年信息学奥赛NOIP普及组
初赛
更早
2022-11-16 12:33:11
37次
一、单选题
二、简答题
program noi_004;
var i, j, j1, j2, p, q : integer;
p1 : boolean;
b,c : array[1..100] of integer;
Begin
readln(q,p); j:=1; p1:=true; b[j]:=q; j1:=0;
while (q>0) and p1 do
begin
j1:=j1+1; c[j1]:=q*10 div p; q:=q*10-c[j1]*p;
if q>0 then begin
j2:=1;
while (b[j2]<>q) and (j2<=j) do j2:=j2+1;
if b[j2]=q then
begin
p1:=false; write('0.');
for i:=1 to j2-1 do write(c[i]:1);
write('{');
for i:=j2 to j1 do write(c[i]:1);
writeln('}')
end
else begin j:=j+1; b[j]:=q end
end
end;
if q=0 then begin
write('0.');
for i:=1 to j1 do write(c[i]:1);
writeln
end; readln
End.
输入 ① 1 8 输出
输入 ② 2 7 输出
【知识点】 信息学NOIP普及组
将
个0和
个1,排成一圈。从任一个位置开始,每次按逆时针的方向以长度为n+1的单位进行数二进制数。
要求给出一种排法,用上面的方法产生出来的
个二进制数都不相同。
例如,当n=2时, 即
个0 和
个1 排成如下一圈:

比如,从A位置开始,逆时针方向取三个数000,然后再从B位置上开始取三个数001,接着从C开始取三个数010,...可以得到000,001,010,101,011,111,110,100共8个二进制数且都不相同。
程序说明
以n=4为例,即有16个0,16个1,
数组a用以记录32个0,1的排法,
数组b统计二进制数是否已出现过。
程序清单

【知识点】 信息学NOIP普及组
program noi_002;
var i, j, l, n, k, s, t : integer;
b : array[1..10] of 0..9;
Begin
readln(l,n); s:=l; k:=1; t:=l;
while s<n do
begin k:=k+1; t:=t*l; s:=s+t end;
s:=s-t; n:=n-s-1;
for i:=1 to 10 do b[i]:=0;
j:=11;
while n>0 do
begin j:=j-1; b[j]:=n mod l; n:=n div l end;
for i:=10-k+1 to 10 do write(chr(ord('A')+b[i]));
End.
输入: 4 167
输出:
【知识点】 信息学NOIP普及组

则



