Tải bản đầy đủ (.doc) (5 trang)

1 nguyen ly vet can toan bo

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (454.4 KB, 5 trang )

Gv: Nguyễn Trung Nhẫn - Phương pháp vét cạn

Phương pháp vét cạn tồn bộ.
Muốn tìm được cây kim trong đống rơm, hãy lần lượt rút từng cọng rơm cho đến khi
rút được cây kim
Mơ tả tuật tốn:
Gọi D là khơng gian của bài toán (tập tất cả các khả năng có thể xảy ra của bài
tốn)
D = tập tất cả các bộ (x1, x2, …, xn)
Trong đó:
X1  D1
X2  D2

Xn  Dn
Và Di là các tập hữu hạn có số phần tử mi
Gọi quy tắc xác định lời giải là một ánh xạ f
f : D à {True, False}
Để tìm kiếm lời giải bài tốn ta lần lượt xét tất cả các phần tử của tập D, nếu phần tử
x=(x1,x2,…, xn) thỏa f(X)= True thì X là một lời giải của bài toán
Coloigiai:=false;
For  x1  D1 do
For  x2  D2 do
….
For  xn  Dn do
If f(x1,x2,..,xn)=True then
begin
<x1, x2, …, xn> là 1 lời giải
coloigiai:=true
end;
If coloigiai= False then <bai toan vo nghiem>
VD1. Vừa gà vừa chó 36 con, bó lại cho trịn 100 chân chẵn. Tìm số gà, số chó mỗi loại?


HD. Ta có D = D1 x D2
D1: tập các giá trị mà số gà có thể nhận D1=[1..36] à ga
D2: tập các giá trị mà số chó có thể nhận D2=[1..25] à cho
Điều kiện nhận kết quả

Đk1: ga+cho =36

Đk2: ga x 2 + cho x 4 =100
Code tham khảo
var ga, cho:byte;
begin
for ga:=1 to 36 do
for cho:=1 to 25 do
if (ga+cho=36) and (ga*2+cho*4=100) then write(ga:4,cho:4);
readln
end.
VD2. LỚP HỌC MÚA

1


Gv: Nguyễn Trung Nhẫn - Phương pháp vét cạn

Lớp học múa khiêu vũ dạ hội của giáo sư Padegras có n học sinh nam và nữ ghi tên.
Giáo sư cho tất cả học sinh xếp thành một hàng dọc và chọn một nhóm các học sinh liên
tiếp nhau cho buổi học đầu tiên với yêu cầu là số học sinh nam và nữ phải bằng nhau.
Hãy xác định, giáo sư Padegras có bao nhiêu cách lựa chọn khác nhau cho buổi học
đầu tiên.
Dữ liệu: Vào từ file văn bản DANCE.INP:
Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 106),

Dòng thứ 2 chứa xâu độ dài n bao gồm các ký tự từ tập {a, b} xác định dòng xếp hàng, a
là nam, b – nữ.
Kết quả: Đưa ra file văn bản DANCE.OUT một số nguyên – số cách lựa chọn.
Ví dụ:
DANCE.INP
DANCE.OUT
8
abbababa
13
Kiểm tra các xâu con k ký tự liên tiếp nhau, với k = 2 ÷ n.

Phát biểu lại bài tốn: Đếm xem có bao nhiêu xâu con có số kí tự a bằng số kí tự b
function compare(st:string):boolean;
var x,y,j:integer;ss:boolean;
begin
x:=0;y:=0;
for j:=1 to length(st) do
begin
if st[j]='a' then inc(x);
if st[j]='b' then inc(y);
end;
if x=y then ss:=true else ss:=false;
compare:=ss;
end;
Code tham khảo
procedure xuly;
begin
k:=0;
repeat
k:=k+1;

for i:=1 to n-k+1 do
for j:=i+k-1 to n do
if compare(copy(s,i,j-i+1)) then inc(dem);
until k<=n;
end;

2


Gv: Nguyễn Trung Nhẫn - Phương pháp vét cạn

BÀI TẬP:
Bài 1: Nhập vào dãy n số nguyên dương
Yêu cầu:
 Sắp dãy số không tăng
 In ra các cặp số nguyên tố song sinh (số nguyên tố song sinh là các cặp số nguyên
tố có hiệu bằng 2
Vd. 12 3 4 5 7 120 12 14 15
à 120 15 14 12 7 5 4 3
à Co cac cap so nguyen to song sinh la:
7 va 5
5 va 3
Code tham khảo
procedure sapxep;
var tam:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]begin

tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
end;
Function ktnt(n:integer):boolean;
Var kt:boolean;
j:integer;
Begin
kt:=true;
for j:=2 to n div 2 do
if n mod j=0 then kt:=false;
ktnt:=kt;
End;
Code tham khảo
procedure xuly;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if ktnt(a[i]) and ktnt(a[j]) and (a[i]-a[j]=2) then
writeln(a[i],' va ',a[j]);
end;
BÀI 2: Mật khẩu
Một xâu kí tự được gọi là mật khẩu “an tồn” nếu xâu có độ dài ít nhất 6 kí tự và xâu
chứa ít nhất một chữ cái in hoa (‘A’ .. ‘Z’), một chữ cái in thường (‘a’..’z’), một chữ số
(‘0’..’9’).
Ví dụ, ‘a1B2c3’, ‘tinHoc6’ là các mật khẩu an toàn, ‘tinhoc’, ‘a1B2c’ là các mật khẩu
khơng an tồn.
u cầu: Cho xâu S, tính số lượng xâu con là mật khẩu an toàn


3


Gv: Nguyễn Trung Nhẫn - Phương pháp vét cạn

Dữ liệu vào: File xau.inp gồm một dòng chứa xâu S
Kết quả: Xuất ra file matkhau.out mọt số nguyên là số lượng xâu con là mật khẩu an
toàn.
Code tham khảo
procedure try;
var x1,x2,n:longint;
begin
n:=length(s);
count:=0;
for x1:=1 to n do
for x2:=1 to n do
if isOK(x1,x2) then count:=count+1;
end;
---------function isOK(x1,x2:longint):boolean;
begin
isOK:=(x2-x1>=5)
and (checkHAZ(x1,x2))
and (checkLaz(x1,x2))
and (check09(x1,x2));
end;
---------------function check09(x1,x2:longint):boolean;
var i:integer;
kt:boolean;
begin
kt:=false;

for i:=x1 to x2 do
if (s[i]>='0') and (s[i]<='9') then kt:=true;
check09:=kt
end;
-------function checkHAZ(x1,x2:longint):boolean;
var i:integer; kt:boolean;
begin
kt:=false;
for i:=x1 to x2 do
if (s[i]>='A') and (s[i]<='Z') then kt:=true;
checkHAZ:=kt;
end;
function checklaz(x1,x2:longint):boolean;
var i:integer; kt:boolean;
begin
kt:=false;
for i:=x1 to x2 do
if (s[i]>='a') and (s[i]<='z') then kt:=true;
checkLaz:=kt;
end;

4


Gv: Nguyễn Trung Nhẫn - Phương pháp vét cạn

Bài 3: Đếm tàu
Một tệp văn bản có tên fn có ghi sơ đồ một vùng biển hình chữ nhật chiều ngang
250 kí tự, chiều dọc (số dịng) khơng hạn chế. Trên biển có các con tàu hình chữ nhật
chứa các kí tự 1, vùng nước được biểu thị qua các kí tự 0. Biết rằng các con tàu khơng

dính nhau. Hãy đếm số lượng tàu.
Ví dụ, hình bên có 4 tàu.
56
000000
011001
000001
011000
000011
Hướng dẫn giải:
Nhận xét:
Để đếm số tàu ta chỉ cần đếm các mũi tàu (nghĩa là ô trên cùng bên trái của tàu là đủ
vì tàu là các khối hình chữ nhật số 1).
Bài tốn có thể phát biểu lại: đếm các ô (i,j) mà giá trị a[i,j]=1 và a[i-1,j]=0 và a[I,j-1]=0
Code tham khảo
procedure xuly;
begin
dem:=0;
for i:=1 to n do
for j:=1 to m do
if (a[i,j]=1) and (a[i-1,j]=0) and (a[i,j-1]=0) then inc(dem);
end;

5



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×