tháng 3 2022

Để đảm bảo an ninh dữ liệu tại sân bay, nhà chức trách đã xác lập mật khẩu từ bảng số liệu có n hàng (n ≤ 10) h1, h2, …, hn tương ứng với hàng thứ 1, 2, …, n tính từ trên xuống, mỗi hàng hi (i=1,…,n) có ít nhất từ 3 đến không quá 100 số tự nhiên được phân biệt bởi dấu cách. Mật khẩu được xác định bằng cách viết liên tiếp n số x1, x2, …, xn theo thứ tự từ trái sang phải, với xi (i=1,2 ,…n) là số cách chọn bao số tuỳ ý trên hàng hi, sao cho tích ba số đó chia hết cho tổng của chúng.

Yêu cầu: Lập trình giúp nhà chức trách sân bay xác lập mật khẩu.

- Dữ liệu vào: Đọc từ file văn bản MATKHAU.INP chứa n hàng như phần mô tả trong bảng số liệu đã nêu trên.

- Dữ liệu ra: Kết quả ghi ra file văn bản MATKHAU.OUT là số mật khẩu tìm được.

Ví dụ:

MATKHAU.INP

MATKHAU.OUT

0 1 3 5 3 4 1 3

1 3 2 3 3 1 2

1 1 3

0 1 3 1

271303

 


Ý tưởng:

+ Đọc hết 1 dòng vào mảng A (N phần tử)

+ Dùng 3 vòng For (mỗi dòng nhiều nhất 10^2 vậy 3 vòng For 10^6 và nhiều nhất là 10 vòng, vậy O(10^1 * 10^6 = 10^7)).

+ Kiểm tra tích 3 số có chia hết cho tổng hay không?

 Nếu (a[i]*a[j]*a[k]) mod (a[i]+a[j]+a[k]) = 0 thì d:=d+1;

+ In ra D.

CODE THAM KHẢO:
program Mat_Khau;
var A:array[1..101] of integer;
    fi,fo:text;
    M:byte;
procedure XuLy(N:byte);
var i,j,k: byte; d: longint;
begin
        d:=0;
        for i:=1 to n-1 do
           for j:=i+1 to n-1 do
              for k:=j+1 to n do
              if (a[i]*a[j]*a[k]) mod (a[i]+a[j]+a[k]) = 0 then inc(d);
        write(fo,d);
end;
begin
        assign(fi,'MATKHAU.INP'); reset(fi);
        assign(fo,'MATKHAU.OUT'); rewrite(fo);
        while not eof(fi) do
        begin
                M:=0;
                while not eoln(fi) do
                begin
                        M:=M+1;
                        read(fi,A[M]);
                end;
        readln(fi);
        XuLy(M);
        end;
        close(fi);  close(fo);
end.



Trong thời đại ngày nay, thông tin cá nhân của mỗi người dễ dàng bị xâm nhập bởi rất nhiều công nghệ hiện đại dùng nghe lén. Chính vì vậy, một đôi bạn muốn bảo mật thông tin cho nhau đã có sáng kiến nghĩ ra cách trao nhau những thông điệp mà người khác đọc hoặc nghe được thì không hiểu gì. Thông điệp của họ là một câu với nhiều từ được phân biệt bởi ký tự trắng (dấu cách) và được sắp xếp lộn xộn để trở thành câu vô nghĩa. Để hiểu nội dung một thông điệp của người bạn gửi cho mình, hai người bạn đã quy ước trước một bộ mã là một dãy số nguyên dương có số lượng tương ứng với số từ của thông điệp nhằm giải mã thành câu có ý nghĩa.

            - Dữ liệu vào: Đọc từ file văn bản GIAIMA.INP gồm hai dòng:

            + Dòng thứ nhất ghi một chuỗi ký tự có số lượng không quá 50 từ, mỗi từ không quá 30 ký tự.

            + Dòng thứ hai ghi bộ mã gồm một dãy các số nguyên dương đôi một khác nhau để giải mã thông điệp trên.

            - Dữ liệu ra: File văn bản GIAIMA.OUT gồm một dòng ghi câu đã được giải mã từ thông điệp đã cho.

            Ví dụ:

GIAIMA.INP

GIAIMA.OUT

luon chuc hoc ban gioi luon

2 4 1 6 3 5

chuc ban luon luon hoc gioi


CODE THAM KHẢO:

program Giai_Ma;

var Tex:array[1..101] of string;

    key: array[1..101] of byte;

    S,S1:string;

    n,i:byte;

    fi,fo:text;

procedure tachtu;

var s1: string; i,M: byte;

begin

        M:=0; S:=S+' '; s1:='';

        for i:=1 to length(s) do

        begin

                if (s[i]=#32) and (length(s1)>0) then

                begin

                        M:=M+1;

                        Tex[M]:=S1;

                        s1:='';

                end

                else s1:=s1+s[i];

        end;

end;

begin

        assign(fi,'GIAIMA.INP'); reset(fi);

        readln(fi,S);

        n:=0;

        while not eoln(fi) do

        begin

                n:=n+1;

                read(fi,key[n]);

        end;

        assign(fo,'GIAIMA.OUT'); rewrite(fo);

        tachtu;

        for i:=1 to n do write(fo,tex[Key[i]],' ');

        close(fi); close(fo);

end.



Một tư nhân có hai tàu thuỷ chuyên vận chuyển hàng khô rất uy tín đối với khách hàng. Được uy tín như vậy là do lịch trình cập cảng của các tàu đảm bảo số ngày quy định, an toàn và cập cảng ngày nào thì cũng rời cảng trong chính ngày đó. Tại cảng chính, tàu thứ nhất cứ K ngày cập cảng 1 lần; tàu thứ hai cứ S ngày cập cảng 1 lần (k≠s).

            Yêu cầu: Lập trình tính xem nếu hai tàu cùng rời cảng thì thời gian ngắn nhất gặp lại nhau tại cảng đó là bao nhiêu ngày?

            - Dữ liệu vào: Đọc từ file văn bản TAU.INP chứa một dòng gồm hai số nguyên dương KS, hai số cách nhau ít nhất một ký tự trắng.

            - Dữ liệu ra: Kết quả ghi ra file văn bản TAU.OUT thời gian ngắn nhất.

            TAU.INP

TAU.OUT

6 4

12

Ý tưởng: Tìm bội chung nhỏ nhất (thuật toán Euclid)

CODE THAM KHẢO:

program Tau_Cap_Cang;

var S,K: integer;

    f: text;

function UCLN(a,b: integer): integer;

var  r: integer;

begin

        while b <> 0 do

        begin

                r:= a mod b;

                a:=b;

                b:=r;

        end;

        UCLN:=a;

end;

begin

        assign(f,'TAU.INP'); reset(f);

        readln(f,K,S);

        close(f);

        assign(f,'TAU.OUT'); rewrite(f);

        write(f,S*K/UCLN(K,S):0:0);

        close(f);

end.




Số siêu nguyên tố là số nguyên tố mà khi bỏ một số tuỳ ý các chữ số bên phải của nó thì phần còn lại vẫn tạo thành một số nguyên tố.

            Ví dụ: 7331 là một số siêu nguyên tố có 4 chữ số, vì 733, 73, 7 cũng là các số nguyên tố.

            Em hãy viết chương trình tìm các số siêu nguyên tố có N chữ số (0<N<10) và số lượng các số tìm được.

            Dữ liệu vào: cho trong File SIEUNT.INP chứa số N.

            Kết quả: ghi ra file SIEUNT.OUT gồm các dòng:

            - Dòng 1: số lượng các số siêu nguyên tố có N chữ số.

            - Dòng tiếp theo: liệt kê các số siêu nguyên tố tìm được (hiển thị 3 số trên 1 dòng).

            Ví dụ:

SIEUNT.INP

SIEUNT.OUT

4

16

2333 2339 2393

2399 2939 3119

3137 3733 3739

3793 3797 5939

7193 7331 7333

7393


    - Cách làm: 
    + Xây dựng cấu hình (X1,X2,..,Xn) 
    + Khi ta xóa dần các chữ số bên phải thì số còn lại vẫn là số nguyên tố 
    + Như vậy khi số còn lại một chữ số thì số còn lại vẫn là số nguyên tố: như vậy ta biết được X1 trong cấu hình chắc chắn sẽ nhận các giá trị 2,3,5,7 
    + Tiếp tục khi ta ghép các số bên phải thì số đó cũng là số nguyên số nên: X2,..,Xn có thể nhận các giá trị 1,3,7,9 
    + Khi x1 nhận lầm lượt 2,3,5,7 
    + Ta thử X2 nhận lần lượt 1,3,7,9 Nếu X1*10+X2 là số nguyên tố thì ta đi thử X3 nhận lần lượt 1,3,7,9 ..... Ta thử đến Xn 
    + In cấu hình tìm được (X1,X2,..,Xn) ta được một số siêu nguyên tố

    CODE THAM KHẢO:
program Sieu_Nguyen_To;
var d,j,n,nt: longint;
    Luu:array[1..100] of longint;
    X1, X2: array[1..10] of longint;
    fi, fo: text;
procedure Khoitao;
begin
        assign(fi, 'SIEUNT.INP'); reset(fi);
        readln(fi,n);
        X1[1]:=2; X1[2]:=3; X1[3]:=5; X1[4]:=7; d:=0;
        X2[1]:=1; X2[2]:=3; X2[3]:=7; X2[4]:=9;
        close(fi);
end;
function NgTo(M: longint): boolean;
var S,K: longint;
begin
        NgTo:=True;
        for k:=2 to trunc(sqrt(M)) do
          if M mod k = 0 then exit(False);
end;
procedure Try(i:byte);
var j:byte;
begin
        for j:=1 to 4 do
        begin
                NT:=NT*10+X2[j];
                if NgTo(NT) then
                  if i=N then
                     begin
                        inc(d); Luu[d]:=NT;
                     end
                  else  Try(i+1);
                NT:=NT div 10;
        end;
end;
begin
        Khoitao;
        assign(fo,'SIEUNT.OUT'); rewrite(fo);
        for j:=1 to 4 do
        begin
                NT:=X1[j]; Try(2);
        end;
        write(fo,d);
        for j:=1 to d do
        begin
                if j mod 3 = 1 then writeln(fo);
                write(fo,Luu[j],' ');
        end;
        close(fo);
end.


Số tự nhiên N gọi là dư thừa nếu tổng các ước số của N (bao gồm cả 1 nhưng không có N) lớn hơn N.

Bài toán: Tìm số M là số dư thừa nhỏ nhất không nhỏ hơn N.

Dữ liệu: Cho trong file văn bản ANUM.INP, gồm số tự nhiên N.

Kết quả: Cho trong tập tin văn bản ANUM.OUT, gồm số M là số dư thừa nhỏ nhất không nhỏ hơn N. Giả sử rằng kết quả là số tự nhiên không quá 10000.

Ví dụ:

ANUM.INP

ANUM.OUT

6

12


CODE THAM KHẢO: 
program so_du_thua;
var N,i,M: integer;
    tong:longint;
    f:text;
begin
        assign(f,'ANUM.INP'); reset(f);
        readln(f,n);
        close(f);
        assign(f,'ANUM.OUT'); rewrite(f);
        M:=N;
        while M < 10001 do
        begin
                tong:=1;
                for i:=2 to trunc(sqrt(M)) do
                begin
                        if M mod i = 0 then tong:=tong+i+(M div i);
                end;
                if tong > M then
                begin
                        write(f,M);
                        break;
                end;
                M:=M+1;
        end;
        close(f);
end.



Một mảng có kích thước 5 x 5 gồm các số nguyên dương được sắp xếp theo quy luật sau:

1

2

3

4

5

2

4

6

8

10

3

6

9

2

4

4

8

2

4

6

5

10

4

6

8

            Hãy tạo ra bảng n x n theo quy luật trên.

            Dữ liệu vào từ file: TAOBANG.INP

            - Dòng duy nhất ghi số n (1 ≤ n ≤ 600).

            Kết quả ra file: TAOBANG.OUT

            - Gồm n dòng, mỗi dòng gồm n số được sắp xếp theo quy luật, mỗi số cách nhau một khoảng trắng.

Ví dụ:

TAOBANG.INP

TAOBANG.OUT

6

1 2 3 4 5 6

2 4 6 8 10 12

3 6 9 12 2 4

4 8 12 2 4 6

5 10 2 4 6 8

6 12 4 6 8 10


CODE THAM KHẢO:
Program Tao_bang;
var a:array[0..601,0..601] of longint;
    n,m,r,c,k,i,j: longint;
    fi,fo:text;
procedure DocFile;
var k:longint;
begin
     assign(fi,'TAOBANG.INP'); reset(fi);
     readln(fi,n);
     close(fi);
end;
procedure print;
var i,j: longint;
begin
        for i:=1 to n do
        begin
                for j:=1 to n do write(fo,a[i,j]:3,' ');
                writeln(fo);
        end;
end;
procedure int;
begin
        for i:=1 to n do
          for j:=1 to n do a[i,j]:=0;
end;
procedure tao3dong; //tao N div 2 dong
begin
        for i:=1 to n div 2+1 do
        begin
                r:=i; c:=1;
                for j:=1 to n do
                begin
                        if (r*c>2*n) then
                        begin
                                r:=2; c:=1;
                        end;
                        a[i,j]:=r*c;
                        c:=c+1;
                        a[j,i]:=a[i,j];
                end;
        end;
end;
procedure tao; //tao N-N div 2 dong sau
var i,j,r,c: integer;
begin
        for i:=n div 2+2 to n do
        begin
                r:=i;
                for j:=n div 2+2 to n do
                begin
                        c:=a[i,j-1];
                        if (r+c) > 2*n then
                        begin
                                r:=2;
                                a[i,j]:=a[i-1,j+1];
                                if a[i,j] = 0 then
                                begin
                                        if (a[i,j-1]+2 > 2*N) then a[i,j]:=2
                                        else a[i,j]:=a[i,j-1]+2; //o cuoi
                                end;
                        end
                        else a[i,j]:=a[i,j-1]+2;
                end;
        end;
        a[j,i]:=a[i,j];
end;
begin
        DocFile;
        assign(fo,'TAOBANG.OUT'); rewrite(fo);
        int;
        tao3dong;
        tao;
        print;
        close(fo);
end.


Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget