Giúp mih với Một số mà đọc từ trái sang phải giống hệt như đọc từ phải sang trái gọi là số đối xứng. Số 14541 là số đối xứng còn số 66667 không là số

Giúp mih với
Một số mà đọc từ trái sang phải giống hệt như đọc từ phải sang trái gọi là số đối xứng. Số
14541 là số đối xứng còn số 66667 không là số đối xứng. Hiển nhiên số 0330 không là số đối
xứng (do số 0 đứng ở vị trí đầu tiên bên trái).
Số 21 (biểu diễn trong cơ số 10) không là số đối xứng, nhưng số 21 (biểu diễn trong cơ số 2)
là số đối xứng nếu biểu diễn trong cơ số 2 (10101).
Nhiệm vụ: Viết chương trình đọc vào hai số (biểu diễn trong cơ số 10)
 N (1 £ N £ 15)
 S (0 < S < 10000)
và xuất ra (trong cơ số 10):
 N số đầu tiên lớn hơn S và là số đối xứng khi biểu diễn trong ít nhất hai cơ số c khác
nhau (2 £ c £ 10).
 Số số nguyên tố trong N số nói trên
Dữ liệu: Cho trong tập tin văn bản DUALPAL.IN, gồm một dòng duy nhất chứa hai số
nguyên N và S, cách nhau một khoảng trắng.
Kết quả: Cho trong tập tin văn bản DUALPAL.OUT, gồm N+1 dòng. Trên mỗi dòng của N dòng
đầu tiên là một số đối xứng khi được biểu diễn trong ít nhất hai hệ cơ số c (2 £ c £ 10). Các số trong
N dòng đầu tiên phải thỏa yêu cầu của đề bài và được sắp theo thứ tự tăng dần. Trên dòng N+1 chứa
một số nguyên duy nhất, chỉ số số nguyên tố trong N dòng trên.
Ví dụ:
DUALPAL.IN DUALPAL.OUT
3 25 26
27
28
0

0 bình luận về “Giúp mih với Một số mà đọc từ trái sang phải giống hệt như đọc từ phải sang trái gọi là số đối xứng. Số 14541 là số đối xứng còn số 66667 không là số”

  1. var n,d,d_nt,dem,j:byte;
        i,s:longint;
        f:text;
    const fi=’DUALPAL.INP’;
          fo=’DUALPAL.OUT’;
    function dx(n:qword):boolean;
    var st:string;
        i:byte;
    begin
        str(n,st);
        for i:=1 to length(st) div 2 do
           if st[i]<>st[length(st)-i+1] then
              exit(false);
        exit(true);
    end;
    function doi(n:longint;hs:byte):boolean;
    var a,lt:qword;
    begin
        a:=0;lt:=1;
        while n<>0 do
           begin
               a:=a+(n mod hs)*lt;
               n:=n div hs;
               lt:=lt*10;
           end;
        if dx(a)=true then exit(true);
        exit(false);
    end;
    function nt(n:longint):boolean;
    var i:longint;
    begin
        for i:=2 to trunc(sqrt(n)) do
           if n mod i = 0 then exit(false);
        exit(true);
    end;
    begin
        assign(f,fi);reset(f);
        readln(f,n,s);
        close(f);
        assign(f,fo);rewrite(f);
        d:=0;
        d_nt:=0;
        i:=s+1;
        while d<>n do
           begin
               dem:=0;
               for j:=2 to 10 do
                  if doi(i,j)=true then
                        inc(dem);
               if dem>=2 then
                  begin
                      if nt(i)=true then inc(d_nt);
                      inc(d);
                      writeln(f,i);
                  end;
               inc(i);
           end;
        writeln(f,d_nt);
        close(f);
    end.

    Bình luận

Viết một bình luận