usaco1.2 palsquare 2008.11.5
{Tips:
1.注意正序和逆序的问题,b进制下的平方因为是回文数,不必考虑这个问题。但原数输出时需要考虑转为b进制时的数字顺序,一定要看清楚输出的顺序
2.题目中说,1-300的原数也要b进制输出,这点我忽略了。一定要看清楚题目让如何输出}
{
ID:
PROG: palsquare
LANG: PASCAL
}
program kakashi;
type
arr=array[1..20]of char;
var
x:array[0..20]of char=('0','1','2','3','4','5','6',
'7','8','9','A','B','C','D',
'E','F','G','H','I','J','K');
k,tt,i,j,n,yn,code,u,ii:longint;
f1,f2:text;
flag:boolean;
a,b:arr;
function deal:boolean;
var
p:longint;
begin
deal:=true;
for p:=1 to (j div 2) do
if (a[p]<>a[j+1-p]) then deal:=false;
end;
begin
assign(f1,'palsquare.in');
reset(f1);
assign(f2,'palsquare.out');
rewrite(f2);
readln(f1,n);
for i:=1 to 300 do
begin
u:=0;
ii:=i;
repeat
inc(u);
b[u]:=x[ii mod n];
ii:=ii div n;
until ii<n;
if ii<>0 then begin inc(u);b[u]:=x[ii];end;
tt:=i*i;
j:=0;
repeat
inc(j);
a[j]:=x[tt mod n];
tt:=tt div n;
until tt<n;
if tt<>0 then begin inc(j); a[j]:=x[tt];end;
flag:=deal;
if flag then
begin
for k:=u downto 1 do
write(f2,b[k]);
write(f2,' ');
for k:=1 to j do
write(f2,a[k]);
writeln(f2);
end;
end;
close(f1);
close(f2);
end.