Bài Tập Tin học chọn lọc{Bai toan Xep BALO KNAPSACLE PROBLEM * Co N hop kim loai trong luong PiKG ,co gia ban la Vi USD.Mot balo co the mang duoc M KG .Hay xac dinh ti le can lay o mo
Trang 1Bài Tập Tin học chọn lọc
Trang 2Bài Tập Tin học chọn lọc
{Bai toan Xep BALO (KNAPSACLE PROBLEM)
* Co N hop kim loai trong luong Pi(KG) ,co gia ban la Vi (USD).Mot balo
co
the mang duoc M KG Hay xac dinh ti le can lay o moi hop sao cho thu duoc
1 Balo co gia tri nhat
Vi du:Co 3 hop sat
0USD 24USD 7,5USD 31,5 USD
Ta con rat nhieu phuong an de sap xep.Nhung cach xep de co duoc gia tri nhieu nhat la XEP NHUNG HOP KIM LOAI MA GIA TRI CUA 1 KG LA LON NHAT vao truoc GIAI THUAT:Xep lai cac hop Kim loai,Hop nao ma gia tri 1 KG cao nhat thi xep truoc.Sau do bo tung hop vao cho den khi day Tui thi thoi.Ta co the tach KL cua hop ra}
Program Bai_toan_BALO;
Uses crt;
const N=5;
type arr=array[1 N]of byte;
var P,V,id:arr;{Khoi luong moi hop sat,Gia tri moi hop sat,Giu chi so}
M:real;{Khoi luong tui xach}
{********************************************************************}
Procedure Input;
Var i:byte;
begin
write('Khoi luong tui xach:');readln(M);
write('Do vat :');For i:=1 to n do write(i:5);
Trang 3for j:=i+1 to n do
if V[id[j]]/P[id[j]]>V[id[i]]/P[id[i]] then
begin
temp:=id[i];
id[i]:=id[j];
id[j]:=temp;
end;
end;
{********************************************************************}
Procedure Output;
var i:byte;
begin
write('Do vat :');For i:=1 to n do write(id[i]:5);
writeln;
write('Khoi luong:');for i:=1 to n do write(P[id[i]]:5);
writeln;
write('Gia tri :'); for i:=1 to n do write(V[id[i]]:5);
end;
{********************************************************************}
Procedure Control;
var Value,Temp,Cost:real;i:byte;
begin
i:=1;Value:=0;{Gia tri cua nhung hop duoc xep vao tui}
repeat
if P[id[i]]>=M then temp:=M else temp:=P[id[i]];
Cost:=(V[id[i]]/P[id[i]])*temp;{Chua gia tri cua hop sat duoc chon de bo vao}
writeln('Vat thu ',id[i],' duoc chon:');
write(temp:0:3,'KG ');writeln(cost:0:3,'$ ');
value:=value+cost;
M:=M-temp;
inc(i);
until (M=0) or (i=n+1);
writeln('Tong gia tri cua cac mat hang duoc chon:',value:0:3,'$');
end;
{********************************************************************}
Begin
clrscr;
Randomize;
Input;
writeln;
Sortmax;
writeln('Cac do vat sau khi duoc sap xep:');
Output;
writeln;
Control;
readln;
end
{Cho mot cai can gom 2 dia can va N qua can co trong luong la A[1],A[2] A[n]
la nhung so nguyen Hay tim tat ca cac cach dat mot so qua can len dia ben trai va len dia ben phai sao cho can thang bang(Can thang bang khi trong luong tren hai dia can bang nhau
GIAI THUAT:Vi du cho 4 qua can voi trong luong la:1 2 1 3
Ta co cac cach xep le hai ben nhu sau:
TRAI PHAI
1 1
1 1
1 1 2
1 2 3
2 1 1
3 1 2
+ Ta dung phuong phap vet can
+ Cac bien duoc dung:
Luu1:Luu tru nhung trong luong de dat ben trai
Trang 4Luu2:Luu tru nhung trong luong de dat ben phai
K1:So luong qua can dat ben trai
K2:So luong qua can dat ben phai
Can1:Luu lai tong khoi luong cua cac qua can duoc chon o ben trai
Can2:Luu lai tong khoi luong cua cac qua can duoc chon o ben phai
Chon:Danh dau nhung qua can da duoc chon
Xet qua cac qua can J bat dau tu 1 den N
+ Neu qua can J chua duoc dat len ben nao thi
* Neu ben trai nhe hon ben phai thi
- Dat qua can do ben trai
- Danh dau qua J da duoc chon
- Tang so qua can ben trai le va luu lai khoi luong cua no
- Tang trong luong cua can ben trai
- Xet qua can ke tiep
* Neu ben phai nhe hon ben trai thi lam nguoc lai doi voi ben phai
* Chu Y:Khi chon duoc 1 cach can thi ta quay lui lai de tim cach can khac} Program bancan;
Trang 5{(Chai mang ty le 1:k);Tim cach chia A[1 N] cho truoc thanh hai doan
co tong cac phan tu trong doan nay gap k lan tong cac phan tu trong doan
kia ,K nguyen duong
GIAI THUAT:Tim tong cua toan bo cac phan tu
Neu tong chia het cho K+1 phan thi
+ Tinh gia tri cua phan 1:TB=Tong div (K+1); + Tim nhung so trong day co tong la TB}
Trang 7Giai thuat:Quay lui(Back tracking)}
Trang 8Procedure Input;
Var I:Byte;
Begin
Write('Nhap So loai tien:');Readln(M);
Write('Nhap so tien can doi:');Readln(N);
2) Tu 1 thanh pho so cac duong di ra bang so cac duong di vao
Lap thuat toan tim mot con duong xuat phat tu 1 thanh pho nao do ,di qua tat
ca cac tuyen duong ,moi tuyen duong 1 lan ,cuoi cung tro ve thanh pho ban dau GIAI THUAT:Quay lui}
Trang 9var A:arr;{Quan he cua Thanh pho I voi J}
TD:arr1;{Luu tru thanh pho da di qua}
Ok:arr2;{Kiem tra thnh pho da duoc di qua}
if A[TD[n],Td[1]]=1 then {Kiem tra thanh pho cuoi cung voi thanh pho
dau tien di qua co duong di voi nhau khong}
if (a[i,j]=1) and Ok[j] then
{Dieu kien de di tu TP I de TP J la hai thanh pho phai thong nhau
Va thanh pho J chua di qua}
begin
Inc(k);
TD[k]:=j;{luu tru thanh pho duoc di qua}
Ok[j]:=false;{Thanh pho J da di qua}
truyhoi(j);{Xet thanh pho J voi thanh pho chua duoc chon}
Trang 10dem:=0;
fillchar(Ok,sizeof(ok),true);
Ok[2]:=false;k:=1;
Td[1]:=2;{Xuat phat tu thanh pho thu 2}
writeln('Cac cach di:');
truyhoi(2);
if dem=0 then writeln('Khong co cach di nao')
else writeln('Co ',dem,' cach di');
de sap xep moi nguoi 1 cong viec sao cho cong suc bo ra la it nhat
THUAT TOAN: Vet can tat ca cac truong hop xay ra Chon truong hop toi uu} Program baitoan_congviec;
Var C:arr;{Cong suc lam viec}
A:arr1;{Chua cong viec duoc chon khi xet tung truong hop}
B:arr1;{Luu lai ket qua cong viec duoc chon tam thoi}
j,n:byte;
Tong:word;{Chua tong cac cong viec cua tung buoc chon}
min:word;{Giu gia tri de tim ra TONG cac cong viec nho nhat}
Chon:arrbol;{keim tra xem Cong Viec do duoc chon hay chua}
{***************************************************************************} Procedure nhap;
End;
End;
{***************************************************************************} Procedure truyhoi(i:byte);
Trang 11Tong:=Tong+C[i,j];{Tinh TONG cac cong suc lam viec cua nguoi i voi viec j}
Chon[j]:=true;{Danh dau cong viec J duoc chon}
Truyhoi(i+1);{Xet nguoi tiep theo}
Tong:=Tong-c[i,j];{Bot lai cong suc lam viec J cua nguoi I}
Chon[j]:=False;{Tra lai cong viec J}
End;
end;
{***************************************************************************} Begin
writeln('Cong viec duoc sap xep lai la:');
write('Nguoi thu :');for j:=1 to n do write(j:4);writeln;
write('Cong viec :');for j:=1 to n do write(b[j]:4);writeln;
write('Suc Lam :');for j:=1 to n do write(c[j,b[j]]:4);writeln;
writeln('Cong suc bo ra la:',min);
Readln;
end
{De 211:Cho truoc so tu nhien N.Lap thuat toan cho biet N co the bieu dien thanh tong cua hai hay nhieu so tu nhien lien tiep hay khong?
Trong truong hop co ,hay the hien tat ca cac cach co the co
GIAI THUAT:Vet can tat cac cac truong hop xay voi dieu kien so duoc chon sau phai lon hon so duoc chon truoc}
Program De_so_211;
uses crt;
var a:array[1 255]of byte;{Chua cac so duoc chon}
n:byte;{So muon phan tich}
k:byte;{So luong So duoc chon}
tong:byte;{Chua tong cac so duoc chon ,de so sanh voi N}
solan:word;{So luong cac cach bieu dien}
{******************************************************************}
Procedure print;
var j:byte;
begin
solan:=solan+1;{Tang so cach bieu dien}
write('Cach thu ',solan,':');
for j:=1 to k do begin write(a[j]);if j<k then write('+');end;
if (j+tong<=n) and (i<j) then
{Dieu kien de so duoc chon:So do cong voi tong cu <=N,So chon sau phai
lon hon so chon truoc}
begin
tong:=tong+j;{Cong so duoc chon vao tong}
inc(k);
Trang 12a[k]:=j;{Ghi nhan so duoc chon}
Tim(j);{Tim so tiep theo}
Trong truong hop co ,hay the hien tat ca cac cach co the co
GIAI THUAT:Vet can tat cac cac truong hop xay voi dieu kien so duoc chon sau phai lon hon so duoc chon truoc}
Program De_so_211;
uses crt;
var a:array[1 255]of byte;{Chua cac so duoc chon}
n:byte;{So muon phan tich}
k:byte;{So luong So duoc chon}
tong:byte;{Chua tong cac so duoc chon ,de so sanh voi N}
solan:word;{So luong cac cach bieu dien}
{******************************************************************}
Procedure print;
var j:byte;
begin
solan:=solan+1;{Tang so cach bieu dien}
write('Cach thu ',solan,':');
for j:=1 to k do begin write(a[j]);if j<k then write('+');end;
if (j+tong<=n) and (i<j) then
{Dieu kien de so duoc chon:So do cong voi tong cu <=N,So chon sau phai
lon hon so chon truoc}
begin
tong:=tong+j;{Cong so duoc chon vao tong}
inc(k);
a[k]:=j;{Ghi nhan so duoc chon}
Tim(j);{Tim so tiep theo}
Trang 13GIAI THUAT:Quay lui
Ban Nu nao da duoc moi khieu vu cung voi nguoi ban trai
ma minh quen thi ban do khong duoc chon nua.Neu chon
duoc dung N cap thi Print,neu khong thi quay lai chon
cach khac}
Program De_so_216;
uses crt;
const n=8;{So cap}
type arr=array[1 n,1 n]of byte;
var A:arr;{Quan he cua N ban nam va N ban nnu}
dem:byte;{Dem so lan chon}
dance:array[1 n]of boolean;{Xet xem ban Nu duoc chon chua}
nguoi:array[1 n]of integer;{Luu tru lai nhung ban nu duoc chon}
{Kiem tra xem quan he ban dau co dung qui dinh khong:
2 nam quen voi 2 nu va nguoc lai}
if a[i,j]=1 then tong1:=tong1+1;
if a[j,i]=1 then tong2:=tong2+1;
if (tong1>2) or (tong2>2) then exit;
end;
end;
Trang 14Ok:=true;
end;
{************************************************************************} Procedure Print;
timketiep(i+1);{Xet nguoi Nam ke tiep}
dance[j]:=false;{Xoa bo viec danh dau,Nguoi Nu thu j khong
duoc chon}
end;
end;
{************************************************************************} begin
GIAI THUAT:Viet 1 ham doi ra nhi phan(nguoc) cua 1 so
Viet ham OK kiem tra so a co nam trong so b khong
Cho d chay tu N xuong M Kiem tra dong thoi d co nam trong
Trang 15{**************************************************************}
Function Ok(st1,st2:string):boolean;{Kiem tra nhi phan cua so nay co the
thu duoc bang cach bo di 1 so chu so cua
nhi phan cua so kia hay khong}
for i:=1 to length(st1) do
if pos(st1[i],st2)<>0 then delete(st2,pos(st1[i],st2),1)
{De_so_254:Bai toan "Ca Heo":
Loai ca heo chi chuyen dong theo 3 huong:Tu vi tri (X,Y) no chi co the chuyen
dich duoc den vi tri (X+1,Y) hoac (X,Y+1) hoac (X-1,Y-1).Gia su vi tri ban dau cua ca heo la o trai duoi cua luoi o vuong NxN
Lap thuat toan cho biet ca heo co the di khap ban co ,moi o 1 lan hay khong? Neu duoc ,chi ra lo trinh cua ca heo
GIAI THUAT:Ca heo chi chuyen dong duoc ve 1 trong 3 huong:
Tu (X,Y) > (U,V) =>U=X+1;V:=Y+0;
Tu (X,Y) > (U,V) =>U=X+0;V:=Y+1;
Tu (X,Y) > (U,V) =>U=X-1;V:=Y-1;
+ Dung ma tran A de chua danh dau cot ,dong da di qua:A[Dong,Cot]=1
Va chua di qua A[Dong,Cot]=0;
+ Dung Mang Luu de luu tru Dong va Cot vua di qua
Trang 16+ Luu giu lai U,V
+ Danh dau Dong V ,Cot V da di qua :A[U,V]:=1;
+ Xet O(U,V) voi cac o con lai + Neu khong tim duoc duong di hay
da tim 1 con duong
di,Quay lai de tim duong khac} Program Baitoan_Caheo;
Trang 17GIAI THUAT :Xet tung thanh pho.Gia su xuat phat tu 1 thanh pho Ai nao do Xem luong xang du tru voi luong xang phai di tu
type arr=array[1 n] of integer;
var X:arr;{So xang du tru}
P,id:arr;{So xang hao khi di giua hai TP}
i,j,k:byte;
q:boolean;{Kiem tra dieu kien de thoat:Khi xuat phat tu thanh pho
nao do ma co the di het duoc qua tat ca cac thanh pho con lai}
Xangdu:integer;{Tinh luong xang con du khi chay giua hai thanh pho} {****************************************************************}
Trang 18inc(i);{Kiem tra thanh pho Ai}
q:=false;
xangdu:=X[i]-P[i];{Luong xang}
k:=1;j:=i;{bat dau xet tu thanh pho Ai tro di}
{Dieu kien xet tiep la Luong xang du>0 nghia la xang du tru phia nhieu hon xang su dung khi di va so thanh pho chua xet het}
while (xangdu>0) and (k<=n) do begin inc(j);
if j=n+1 then j:=1;{Neu qua thanh pho cuoi cung thi quay tro
khoi sao cho tong khoi luong cac do vat cua hai khoi la xap xi nhau nhat(nghia
la hieu hai kkhoi luong la nho nhat
GIAI THUAT:Tim tong khoi luong cua N do vat
=>Trung binh cua hai khoi
Sap xep do vat tang dan theo khoi luongffff
Tim nhung do vat co tong khoi luong gan voi Trung binh nhat} Program De299;
Writeln('Tong khoi luong cua ',n,' do vat la:',Tong);
TB:=Tong div 2;{Trung binh trung binh cua 1 khoi}
Trang 19{De_so_380:Cho truoc 4 so tu nhien bat ky.Hay datcac dau + hoac - truoc
chung sao cho tong thu duoc chia het cho 10
Lap chuong trinh tinh tong do}
Trang 20{De_so_39:Bai toan "DOI MAU BI":Tren ban co N1 hon bi xanh,N2 hon bi do,N3 hon
bi vang.Luat choi nhu sau:Neu 2 hon bi khac mau nhau cham nhau thi chung se cung ben thanh mau thu 3
(Vi Du:xanh,vang ->do,do)
Tim thuat toan va lap chuong trinh cho biet rang co the bien tat ca cac hon
bi do thanh 1 mau do duoc khong
GIAI THUAT:Trong 2 loai bi mau Xanh va mau Vang.Chon loai bi co so luong
nhieu hon.Lay bi co so luong nhieu hon ,cham voi
bi do
Luc nay Bi co so luong it hon se tang SL len 2 don vi.So
luong bi nhieu hon giam di 1 don vi
+ Neu so luong bi it hon ma tang len bang so luong bi nhieu hon
Trang 21thi luc nay ta co the bien doi ve tat ca deu bi
Write('Nhap so luong bi Bi XANH:');readln(N1);
Write('Nhap so luong bi Bi DO:');readln(N2);
Write('Nhap so luong bi Bi VANG:');readln(N3);
do 2 bi kia cham nhau}
n2:=n2-1;{Bo so luong bi do}
N1:=N1+2;{Tang so luong bi xanh len 2 }
N3:=N3-1;{Giam so luong bi vang} writeln(n1:4,n2:4,n3:4);
vi tri nguoi dua).Sau do tat ca moi nguoi thong bao so de minh Da nhan duoc Lap chuong trinh xac dinh vi tri cua nhung nguoi trong ban can su Luu y rang
co the co nhieu loi giai Trong bang la 1 vi du voi M=N=6
Input Output
Trang 22Neu mot vi tri ma xung quanh no cac vi tri deu
co gia tri >0
thi vi tri do la vi tri cua nguoi can su
Sau do bot gia tri cua nhung vi tri xung quanh
Var I,j:byte;
Begin
Writeln('Output:');
Trang 23GIAI THUAT:+ Dieu kien can la: Dien tich S2>Dien tich S1
+ Dieu kien du la:Canh lon nhat cua S1 phai nho hon canh lon
Until (A1>0) and (B1>0) and (A2>0) and (B2>0);
Gotoxy(30,1);Writeln('Hinh chu nhat thu 1:');
Trang 24Goi S la so luong cac "tu giac" A[i,j],A[i,j+1],A[i+1,j],A[i+1,j+1]
sao cho cac so o dinh cua no xep tang theo thu tu tang dan theo chieu kim dong ho (Tinh tu 1 dinh nao do)
1/ Lap chuong trinh tinh so luong S
2/ Lap thuat toan xac dinh A sao cho so S la: