天天看點

USACO 1.2 回文平方數

回文平方數

題目描述

回文數是指從左向右念和從右向左念都一樣的數。如12321就是一個典型的回文數。

給定一個進制B(2<=B<=20,由十進制表示),輸出所有的大于等于1小于等于300(十進制下)且它的平方用B進制表示時是回文數的數。用’A’,’B’……表示10,11等等。

分析:主程式不長,枚舉1~300并判斷,轉B進制的時候存數組裡,最後注意大于10要輸出字母!

代碼

var

  a:array[0..10000] of longint;

  s:string;

  p,i,j,n:longint;

procedure change(x:longint);

begin

  p:=0;

  while x<>0 do

    begin

      inc(p);

      a[p]:=x mod n;

      x:=x div n;

    end;

end;

function check:boolean;

var

  i,j:longint;

begin

  check:=true;

  i:=1;j:=p;

  while i<=j do

    begin

      if a[i]<>a[j] then exit(false);

      inc(i);dec(j);

    end;

end;

begin

  readln(n);

  for i:=1 to 300 do

    begin

      change(sqr(i));

      if check then

        begin

          change(i);

          for j:=p downto 1 do

            if a[j] in [0..9] then write(a[j]) else write(chr(a[j]+55));

          change(sqr(i));

          write(' ');

          for j:=p downto 1 do

            if a[j] in [0..9] then write(a[j]) else write(chr(a[j]+55));

          writeln;

        end;

    end;

end.