您的位置:首页 > 其它

USACO 1.2 回文平方数

2016-04-08 21:43 288 查看
Description  回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。  给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。Input共一行,一个单独的整数B(B用十进制表示)。Output每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。(注意:这两个数都应该在B那个进制下)Sample Input
10
Sample Output
1 1

2 4

3 9

11 121

22 484

26 676

101 10201

111 12321

121 14641

202 40804

212 44944

264 69696



解题思路:从1到300进行循环,进行判断,如果它是循环的话,就进行处理,并判断它在该进制以及它的平方数是否回文,如果是的话就输出。



程序:

var

arr:array[0..1000]of char;

n,count,i,j:longint;


function check(count:longint):longint;

var

a,i:longint;

begin

a:=count div 2;

for i:=0 to a do

if arr[i]<>arr[count-i] then exit(0);

exit(1);

end;


function convert(i,n:longint):longint;

var

q:longint;

begin

q:=-1;

while i<>0 do

begin

q:=q+1;

if i mod n>=10 then arr[q]:=chr(i mod n-10+ord('A'))

else arr[q]:=chr(i mod n+48);

i:=i div n;

end;

exit(q);

end;


procedure convert_2(i,n:longint);

var

crr:array[0..1000]of char;

q,j:longint;

begin

q:=-1;

while i<>0 do

begin

q:=q+1;

if i mod n>=10 then crr[q]:=chr(i mod n-10+ord('A'))

else crr[q]:=chr(i mod n+48);

i:=i div n;

end;

for j:=q downto 0 do

write(crr[j]);

write(' ');

end;


begin

readln(n);

for i:=1 to 300 do

begin

count:=convert(i*i,n);

if check(count)<>0 then

begin

convert_2(i,n);

for j:=count downto 0 do

write(arr[j]);

writeln;

end;

end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: