100 đề Toán Tin Tin học & Nhà trường


Bài 32/2000 - Bài toán 8 hậu



tải về 1.1 Mb.
trang15/22
Chuyển đổi dữ liệu26.07.2016
Kích1.1 Mb.
#6336
1   ...   11   12   13   14   15   16   17   18   ...   22

Bài 32/2000 - Bài toán 8 hậu


(Dành cho học sinh Tiểu học)

Có rất nhiều cách xếp. Sau đây là một vài cách để các bạn tham khảo:




0 1 0 0 0 0 0 0

0 0 0 1 0 0 0 0

0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 1

0 0 1 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 1 0

0 0 0 0 1 0 0 0

0 1 0 0 0 0 0 0

0 0 0 0 1 0 0 0

0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1

0 0 0 0 0 1 0 0

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

0 0 0 0 1 0 0 0

0 0 0 0 0 0 1 0

1 0 0 0 0 0 0 0

0 0 1 0 0 0 0 0

0 0 0 0 0 0 0 1

0 0 0 0 0 1 0 0

0 0 0 1 0 0 0 0

0 1 0 0 0 0 0 0

0 0 0 0 0 1 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0

0 0 0 0 0 0 0 1

0 0 1 0 0 0 0 0

0 0 0 0 1 0 0 0

Để tìm hết nghiệm của bài này chúng ta phải sử dụng thuật toán Đệ quy - Quay lui. Sau đây là chương trình, chạy ra 92 nghiệm và ghi các kết quả đó ra file HAU.OUT.
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+}

{$M 16384,0,655360}

uses crt;
const fo = 'hau.out';

n = 8;
var A : array[1..n,1..n] of byte;

c : array[1..n] of byte;

dc1 : array[2..2*n] of byte;

dc2 : array[1-n..n-1] of byte;

sn : integer;

f : text;
procedure ghino;

var i,j : byte;

begin

inc(sn);


writeln(f,'Nghiem thu ',sn,' la :');

for i := 1 to n do

begin

for j := 1 to n do



write(f,A[i,j],#32);

writeln(f);

end;

writeln(f);



end;
procedure vet(i : byte);

var j : byte;

begin
if i = n+1 then

begin


ghino;

exit;


end;
for j := 1 to n do

if (c[j] =0)and(dc1[i+j]=0) and (dc2[i-j]=0) then

begin

A[i,j] := 1; c[j] := 1; dc1[i+j] :=1 ; dc2[i-j] := 1;



vet(i+1);

A[i,j] := 0; c[j] := 0; dc1[i+j] :=0 ; dc2[i-j] := 0;

end;

end;
BEGIN



assign(f,fo);

rewrite(f);

vet(1);

close(f);



END.

Bài 33/2000 - Mã hoá văn bản


(Dành cho học sinh THCS)

a. Mã hoá:

PEACE thành UJFHJ

HEAL THE WORLD thành MJFQ YMJ BTWQI

I LOVE SPRING thành N QTAJ XUWNSL.

b. Qui tắc giải mã các dòng chữ đã được mã hoá theo quy tắc trên: (lấy ví dụ ký tự X):

-Tìm số thứ tự tương ứng của kí tự, ta được 23.

-Tăng giá trị số này lên 21 (thực ra là giảm giá trị số này đi 5 rồi cộng với 26), ta được 44.

-Tìm số dư trong phép chia số này cho 26 ta được 18.

-Tra ngược bảng chữ cái ta thu được S.



Giải mã:

N FRF XYZIJSY thành I AM A STUDENT

NSKTVRFYNHX thành INFOQMATICS.

MFSTN SFYNTSFQ ZSNBJVXNYD thành HANOI NATIONAL UNIWEQSITY.

Sau đây là chương trình mô tả thuật toán giải quyết bài 33/2000, gồm 2 thủ tục chính là: mahoatu (chuyển xâu thành xâu mã hoá) và giaimatu (chuyển xâu thành xâu giải mã). Các bạn có thể xem kết quả sau khi chạy chương trình bằng cách ấn Alt + F5.
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+}

{$M 16384,0,655360}

uses crt;
function mahoa(x : char) : char;

var vtri : byte;

begin

if upcase(x) in ['A'..'Z'] then



begin

vtri := ord(upcase(x))-ord('A');

vtri := vtri+5;

mahoa := char( vtri mod 26+ord('A'));

end

else mahoa := x;



end;
function giaima(x : char) : char;

var vtri : byte;

begin

if upcase(x) in ['A'..'Z'] then



begin

vtri := ord(upcase(x))-ord('A');

vtri := vtri-5+26;

giaima := char( vtri mod 26 + ord('A'));

end

else giaima := x;



end;
procedure mahoatu(s : string);

var i : byte;

begin

write(s,' -> ');



for i := 1 to length(s) do write(mahoa(s[i]));

writeln;


end;
procedure giaimatu(s : string);

var i : byte;

begin

write(s,' <- ');



for i := 1 to length(s) do write(giaima(s[i]));

writeln;


end;
BEGIN

clrscr;


mahoatu('PEACE');

mahoatu('HEAL THE WORLD');

mahoatu('I LOVE SPRING');

giaimatu('N FR F XYZIJSY');

giaimatu('NSKTVRFYNHX');

giaimatu('MFSTN SFYNTSFQ ZSNBJVXNYD');

END.

Bài 34/2000 - Mã hoá và giải mã


(Dành cho học sinh THCS)
Program bai34;

Uses crt;

Const

Ord : array['A', ..'Z'] of byte =(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);



chr : array[0..25] of char = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');

Var s:string;

i, j:integer; ch:char;

Begin


S:='';

Writeln('Nhap xau ki tu:');

Repeat

ch:= ReadKey;



If (ch in ['a'..'z', 'A'..'Z']) then

Begin


ch := Upcase(ch); Write(ch);

S := S + ch;

End;

Until ch = #13; Writeln;



For i := 1 to length(s) do

If S[i] <> ' ' then S[i] := chr[(ord{s[i]] + 5) mod 26];

Writeln('Xau ki tu tren duoc ma hoa la:'); write(s); Readln;

S:= ' ' ;

Writeln('Nhap xau ki tu can giai ma:');

Repeat


ch := Readkey;

If (ch in ['a'..'z', 'A'..'Z']) then

Begin

ch := Upcase(ch); Write(ch);



s := s + ch;

End;


Until ch = #13; Writeln;

for i := 1 to length{S) do

If S[i] <> ' ' then S[i] := chr[(Ord[S[i]] + 21) mod 26;

writeln('Xau ki tu tren duoc giai ma la:'); write(s);

Readln;

End.


Các bạn cũng có thể sử dụng lại 2 thủ tục mahoatugiaimatu ở bài 33/2000 để giải bài này. Việc thiết kế giao diện khi nhập xâu từ bàn phím xin dành cho các bạn.



tải về 1.1 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   11   12   13   14   15   16   17   18   ...   22




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương