模拟/usaco 1.2.4 Palindromic Squares

题意

  给定一个进制B,输出所有大于等于1小于等于300且它的平方用B进制表示时是回文数的数

分析

  模拟,写清楚进制转换和判断回文即可

Accepted Code

 1 {
 2 ID: jessiel2;
 3 PROG: palsquare
 4 LANG: PASCAL
 5 }
 6 Program palsquare;
 7 Const
 8   Infile = 'palsquare.in';
 9   Outfile = 'palsquare.out';
10 Var
11   now,old:Ansistring;
12   b,i:LOngint;
13   z:Array[10..35]Of Char;
14 Function change(n:Longint):ansiString;
15 Var
16   a:Array[0..100000]Of Longint;
17   temp:ansistring;
18   k,i:Longint;
19 Begin
20   k:=0;
21   While n<>0 Do Begin
22     Inc(k);
23     a[k]:=n Mod b;
24     n:=n Div b;
25   End;
26   temp:='';
27   For i:=k Downto 1 Do
28     If a[i]>9 Then temp:=temp+z[a[i]] Else temp:=temp+chr(a[i]+48);
29   Exit(temp);
30 End;
31 
32 Function check(k:ansiString):Boolean;
33 Var
34   len,i:Longint;
35   k1:ansiString;
36 Begin
37   len:=length(k);
38   k1:='';
39   For i:=len Downto 1 Do k1:=k1+k[i];
40   For i:=1 To len Do
41     If k[i]<>k1[i] THen Exit(false);
42   Exit(true);
43 End;
44 
45 Begin
46   Assign(input,infile);Reset(input);
47   Assign(output,outfile);Rewrite(output);
48   ReadLn(b);
49   For i:=1 To 26 Do z[i+9]:=chr(i+64);
50   For i:=1 To 300 Do Begin
51     now:=change(i*i);
52     If check(now) Then Begin
53       old:=change(i);
54       WriteLn(old,' ',now);
55     End;
56   End;
57   Close(input);Close(output);
58 End.

 

posted @ 2013-06-04 23:05  Rinyo  阅读(174)  评论(0编辑  收藏  举报