USACO-Chapter1-Section 1.2-Dual Palindromes (dualpal)

【题目描述】

      如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。

事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。

编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。

本问题的解决方案不需要使用大于32位的整型

【输入格式】

      只有一行,用空格隔开的两个数N和S。

【输出格式】

      N行, 每行一个满足上述要求的数,并按从小到大的顺序输出.

【输入样例】

3 25

【输出样例】

26
27
28

【思路】

      和上一道题一样,都是进制问题,主意细节就能过。

【代码】

  • Executing...
  • Test 1: TEST OK [0.000 secs, 276 KB]
  • Test 2: TEST OK [0.000 secs, 276 KB]
  • Test 3: TEST OK [0.000 secs, 276 KB]
  • Test 4: TEST OK [0.000 secs, 276 KB]
  • Test 5: TEST OK [0.000 secs, 276 KB]
  • Test 6: TEST OK [0.000 secs, 276 KB]
  • Test 7: TEST OK [0.000 secs, 276 KB]
  • All tests OK.
{
 ID  : c_CaM.19
 LANG: PASCAL
 TASK: dualpal
}
Program CaM(input,output);
Var
  a,c:array[0..500] of char;
  i,j,k,l,b,n,tot,bb,ans:longint;

Procedure innt;
Begin
  assign(input,'dualpal.in'); reset(input);
  assign(output,'dualpal.out'); rewrite(output);
End;

Procedure outt;
Begin
  close(input);
  close(output);
End;

Procedure change(k:longint);
Var
  i,t:longint;
  ch:char;
Begin
  fillchar(a,sizeof(a),0); j:=0;
  while k>0 do
  Begin
    inc(j);
    t:=k mod b;
    case t of
      10:ch:='A';
      11:ch:='B';
      12:ch:='C';
      13:ch:='D';
      14:ch:='E';
      15:ch:='F';
      16:ch:='G';
      17:ch:='H';
      18:ch:='I';
      19:ch:='J';
      20:ch:='K';
    End;
    if t<10 then ch:=chr(48+t);
    a[j]:=ch;
    k:=k div b;
  End;
End;

Function ok(k:longint):boolean;
Var
  i:longint;
Begin
  for i:=1 to k div 2 do
    if a[i]<>a[k+1-i] then exit(false);
  exit(true);
End;

Begin
  innt;
  readln(n,bb);
  for i:=bb+1 to 500000 do
  Begin
    tot:=0;
    for b:=2 to 10 do
    Begin
      change(i);
      if ok(j) then
      Begin
        inc(tot);
        if tot>=2 then
        Begin
          inc(ans);
          writeln(i);
          break;
        End;
      End;
    End;
    if ans=n then break;
  End;
  outt;
End.
posted @ 2012-02-19 11:19  你滴韩王  阅读(228)  评论(0)    收藏  举报