Usaco 1.2.4 回文平方数(Palindromic Squares)

题目:

 回文平方数

来源:

 Usaco1.2.4

题目大意:

 1到300之间的在B进制下平方为回文的输出该B进制数和其平方数

数据范围:

 2<=B<=20

样例:

 10
 
 
 
 
 
 
 
 
 
 
 
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
 

做题思路:

 无比感叹的说,原来辗转相除这么有用啊。。用辗转相除来转换进制,再判断是否是回  文,判断回文:从两头向中间比较好用因为不用管奇偶

知识点:

 进制转换/辗转相除、判断回文、模拟

{
ID:Dount Nameless
TASK:palsquare
LANG:PASCAL
}
var
 a,b:array[0..90000]of longint;
 n,i,j,x,k,t:longint;
function pd(x:longint):boolean;{<判断回文>}
var
 i,j:longint;
begin
 i:=1;j:=x;
 while (a[i]=a[j])and(i<=j) do
 begin
   inc(i);dec(j);
 end;
 ifi>=j then exit(true);
 exit(false);
end;
begin
 assign(input,'palsquare.in');reset(input);
 assign(output,'palsquare.out');rewrite(output);
 readln(n);
 fori:=1 to 300 do
 begin
  x:=sqr(i);
  j:=0;
  while x>0 do{<辗转>}
   begin
    inc(j);
    a[j]:=x mod n;
    x:=x div n;
   end;
   ifpd(j) then
   begin
    x:=i;
    k:=0;
    while x>0 do{<辗转>}
     begin
      inc(k);
      b[k]:=x mod n;
      x:=x div n;
     end;
    for t:=k downto 1 do{<倒着输出,因为是倒着辗转的>}
     if b[t]>9 then write(chr(b[t]-9+64))
      else write(b[t]);
    write(' ');
    for t:=j downto 1 do
     if a[t]>9 then write(chr(a[t]-9+64))
      else write(a[t]);
    writeln;
   end;
 end;
 close(input);close(output);
end.
题目来源: http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=palsquare

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值