Khai báo cấu trúc dữ liệu vàviết thuật giải cho biết mỗi loại tiền cần bao nhiêu tờ sao cho tổng số tờ là ít nhất... Khai báo cấu trúc dữ liệu và viết thuật giải xác định danh sách các t
Trang 1CÂU HỎI ÔN TẬP Phần 1 CTDL và Thuật giải
1 Cho 1 mảng gồm n các số nguyên a[1], a[2], , a[n] và một số nguyên S Khai báo cấu trúc
dữ liệu và viết thuật giải tìm tất cả các dãy con {x1, x2, , xk} sao cho:
1 <= k <= n;
1 <= x1 < x2 < < xk <= n ;
và a[x1] + a[x2] + + a[xk] = S
2 Có N gói kẹo được đánh số từ 1 đến N (N<=100) Gói thứ i có Ai cục kẹo Khai báo cấu trúc
dữ liệu và viết thuật giải chia N gói kẹo thành hai phần sao cho độ chênh lệch số kẹo giữahai phần là ít nhất Yêu cầu, không được thay đổi số kẹo trong mỗi gói Cho biết độ chênhlệch nhỏ nhất giữa hai phần và danh sách gói kẹo của từng phần
3 Có N chi tiết, được đánh số từ 1 tới N, cần được gia công Các chi tiết có thể cho gia côngtrên máy A hoặc máy B Các máy này có thể hoạt động độc lập hay đồng thời Biết rằng thờigian gia công chi tiết i trên máy A là a[i] và trên máy B là b[i] (1 ≤ i ≤ n)
Khai báo cấu trúc dữ liệu và viết thuật giải tìm 1 phương án phân công cho các máy để thờigian hoàn thành cả N chi tiết là sớm nhất
4 Có N đồ vật được đánh số từ 1 đến N Đồ vật thứ i có trọng lượng là Ai và có giá trị sử dụng
là Ci Một người cần chọn một số đồ vật trong N đồ vật đó sao cho tổng giá trị các đồ vậtđược chọn là lớn nhất nhưng tổng trọng lượng của chúng không vượt quá giá trị M chotrước
Khai báo cấu trúc dữ liệu và viết thuật giải xác định các đồ vật cần chọn
5 Trong cửa hàng có N mặt hàng được đánh số từ 1 đến N, mặt hàng thứ i có giá tiền là Ai.Một người cha mang theo số tiền là M cần chọn 4 mặt hàng khác nhau để làm quà cho cáccon, sao cho tổng số tiền của 4 mặt hàng này không lớn hơn số tiền M mang theo và độchênh lệch giá tiền của mặt hàng đắt nhất và mặt hàng rẻ nhất trong 4 mặt hàng được chọn lànhỏ nhất
Khai báo cấu trúc dữ liệu và viết thuật giải xác định 4 mặt hàng đó
6 Có 2 đội cờ A và B, mỗi đội có N người được đánh số từ 1 đến N, tham gia thi đấu N trận,mỗi trận đấu gồm một người của đội A và một người của đội B Huấn luyện viên của đội A
tự đánh giá trình độ của người thứ i trong đội A là Ai và trình độ của người thứ i trong đội B
là Bi Hai người thi đấu có cùng trình độ thì hòa; người nào có trình độ cao hơn thì thắng.Mỗi trận nếu thắng thì được 2 điểm, hòa 1 điểm, thua 0 điểm Khai báo cấu trúc dữ liệu vàviết thuật giải sắp xếp lịch thi đấu để đội A được nhiều điểm nhất, cho biết danh sách các cặpthi đấu
7 Cho dãy A gồm N số nguyên Khai báo cấu trúc dữ liệu và viết thuật giải để tìm các hoán vị{X1, X2, , Xn} của tập {1, 2, , N} sao cho A[X1] <= A[X2] <= <= A[XN]
Ví dụ:
i 1 2 3 4 5A[i] 6 2 8 4 9
Trang 2Hoán vị X cần tìm:
i 1 2 3 4 5X[i] 2 4 1 3 5bA[X[i]] 2 4 6 8 9
8 Cho N loại tờ giấy bạc (N < 50) Tờ giấy bạc thứ i có mệnh giá phân biệt là A[i] Số tờ mỗiloại không giới hạn Cần chi trả cho khách hàng số tiền M đồng Khai báo cấu trúc dữ liệu vàviết thuật giải cho biết mỗi loại tiền cần bao nhiêu tờ sao cho tổng số tờ là ít nhất
Ví dụ: N = 4 và M = 10
Mảng A chứa các giá trị {1, 2, 3, 4}
Kết quả: Số tờ = 3
Trong đó : 2 to loai 4, 1 to loai 2
9 Có N phòng học, được đánh số từ 1 đến N, phòng học thứ i có sức chứa là P[i] sinh viên; và
K lớp học (K<=N), được đánh số từ 1 đến K, lớp học thứ j có số sinh viên là L[j] Phòng đàotạo cần xếp phòng cho các lớp, mỗi lớp 1 phòng
Khai báo cấu trúc dữ liệu và viết thuật giải chọn ra K phòng để xếp cho các lớp, sao cho tổng
số chỗ trống của các phòng được chọn là nhỏ nhất Cho biết các phòng đó là những phòngnào, lớp được xếp tương ứng cho mỗi phòng
10 Tại một kho chứa hàng có N khu vực, mỗi khu vực được đánh số từ 1 đến N, khu vực thứ i
có sức chứa là V[i] container Người ta cần chất M container vào các khu vực này
Khai báo cấu trúc dữ liệu và viết thuật giải chọn ra các khu vực được dùng để xếp Mcontainer sao cho phần còn trống sau khi đã xếp M container ở các khu vực đó là ít nhất
11 Trong một kho hóa chất hiện có N thùng chứa cùng một loại dung dịch Thùng thứ i hiệnchứa A[i] lít dung dịch Do các thùng chứa đã cũ, nên người ta cần bỏ một số thùng cũ vàchứa dung dịch sang những thùng chứa mới
Khai báo cấu trúc dữ liệu và viết thuật giải xác định số thùng cũ nhiều nhất cần loại bỏ saocho dung dịch của các thùng đó được đổ đầy vào các thùng chứa mới Biết rằng, số thùngmới không hạn chế và mỗi thùng đều có dung tích là M lít
13 Có N thành phố được mã hóa bằng các số từ 1 đến N, chi phí đi từ thành phố i đến thành phố
j là C[i,j] với 1≤ i, j ≤ n Một người đang ở thành phố có mã số 1, muốn đi qua tất cả cácthành phố khác và kết thúc tại thành phố có mã số N
Trang 3Khai báo cấu trúc dữ liệu và viết thuật giải xác định danh sách các thành phố phải đi qua saocho tổng chi phí theo hành trình này là ít nhất và trên hành trình đó không được đi qua mộtthành phố nào đó quá 1 lần.
14 Khai báo cấu trúc dữ liệu và viết thuật giải tìm tập hợp các dấu '+’, ‘-‘ và không dấu giữadãy số 123456789 sao cho được một biểu thức có giá trị bằng một số nguyên N cho trước
Ví dụ: N = 280 ta có các tổ hợp sau:
1 + 2 + 345 – 67 + 8 – 9
1 + 234 – 5 + 67 – 8 – 9
123 – 4 + 5 + 67 + 89
15 Khai báo cấu trúc dữ liệu và viết thuật giải xác định tất cả các cách phân tích số tự nhiên N
>1 thành tổng các số tự nhiên nhỏ hơn nó (mọi phân tích chỉ kể đúng một lần: 4+3+1 và1+4+3 chỉ là một)
16 Có n thành phố (được đánh số từ 1 đến n) Một người đi du lịch xuất phát từ thành phố số 1muốn đi thăm các thành phố khác, mỗi thành phố đúng một lần rồi quay về nơi xuất phát.Giả thiết biết được chi phí đi từ thành phố i đến thành phố j là C[i, j] với 1≤ i, j ≤ n
Khai báo cấu trúc dữ liệu và viết thuật giải xác định một hành trình cho người du lịch đểtổng chi phí theo hành trình này là ít nhất
17 Người ta cần đặt 8 Quân Hậu vào các ô trên bàn cờ quốc tế có kích thước 8 dòng và 8 cộtsao cho các quân Hậu không ăn nhau Biết rằng 2 quân Hậu không ăn nhau nếu chúng khôngcùng nằm trên một dòng hoặc trên một cột hoặc trên các đường chéo
Hãy khai báo cấu trúc dữ liệu và viết thuật giải xác định các ô cần đặt 8 quân hậu trên bàncờ
4
Trang 418 Trên bàn cờ quốc tế có kích thước 8 dòng và 8 cột, người ta đặt Quân Mã tại ô thuộc dòng 1cột 1 Khai báo cấu trúc dữ liệu và viết thuật giải xác định các bước đi của Quân Mã trên tất
cả các ô của bàn cờ sao cho mỗi ô chỉ đi qua một lần
19 Mỗi hột xí ngầu có 6 mặt, mỗi mặt chứa từ 1 đến 6 dấu chấm Khai báo cấu trúc dữ liệu vàviết thuật giải liệt kê các kết quả phân biệt có thể có khi đổ cùng lúc 3 hột xí ngầu, không kểthứ tự xuất hiện trên các hột xí ngầu, ví dụ {1, 2, 3} và {2, 3, 1} là như nhau
20 Khai báo cấu trúc dữ liệu và viết thuật giải điền vào một ma trận vuông cấp 3 các số từ 1 đến
9 sao cho các số ở dòng thứ i hợp thành 1 số gấp i lần số hợp bởi dòng thứ 1
Ví dụ :
2 7 3
5 4 6
8 1 9
Trang 5HƯỚNG DẪN BÀI GIẢI
1 Cho 1 mảng gồm n các số nguyên a[1], a[2], , a[n] và một số nguyên S Khai báo cấu trúc dữliệu và viết thuật giải tìm tất cả các dãy con {x1, x2, , xk} sao cho: 1<=x1<x2< <xk<=n và a[x1] + a[x2] + + a[xk] = S
Khai báo cấu trúc:
Input:
Mảng nguyên A[1 N];
Số nguyên S : Giá trị điều kiện cho trước;
Output:
Mảng nguyên X[1 N]: chứa dãy nhị phân với qui ước X[i] =1 thì A[X[i]] được chọn
Thuật giải: Khởi tạo giá trị ban đầu
X[i]: chứa giá trị 0 hay 1;
{
for (int v =0; v<= 1; v++)
Trang 6Thuật giải: Kiểm Tra Mảng X
2 Có N gói kẹo được đánh số từ 1 đến N (N<=100) Gói thứ i có Ai cục kẹo Khai báo cấu trúc
dữ liệu và viết thuật giải chia N gói kẹo thành hai phần sao cho độ chênh lệch số kẹo giữahai phần là ít nhất Yêu cầu, không được thay đổi số kẹo trong mỗi gói Cho biết độ chênhlệch nhỏ nhất giữa hai phần và danh sách gói kẹo của từng phần
Khai báo cấu trúc:
Trang 7Mảng X[1 N]: chứa dãy nhị phân xác định gói kẹo được chọn.
Trang 8if (abs(S1-S2)<D) {
Y = X;
D= abs(S1-S2);
}}
3 Có N chi tiết, được đánh số từ 1 tới N, cần được gia công Các chi tiết có thể cho gia côngtrên máy A hoặc máy B Các máy này có thể hoạt động độc lập hay đồng thời Biết rằng thờigian gia công chi tiết i trên máy A là a[i] và trên máy B là b[i] (1 ≤ i ≤ n) Khai báo cấu trúc
dữ liệu và viết thuật giải tìm 1 phương án phân công cho các máy để thời gian hoàn thành
Mảng X[1 N]: chứa dãy nhị phân xác định chi tiết được gia công trên A hay B
D : thời gian của phương án tối ưu
Thuật giải: Khởi tạo giá trị ban đầu
Trang 104 Có N đồ vật được đánh số từ 1 đến N Đồ vật thứ i có trọng lượng là Ai và có giá trị sử dụng
là Ci Một người cần chọn một số đồ vật trong N đồ vật đó sao cho tổng giá trị các đồ vậtđược chọn là lớn nhất nhưng tổng trọng lượng của chúng không vượt quá M Khai báo cấutrúc dữ liệu và viết thuật giải xác định các đồ vật cần chọn
Khai báo cấu trúc:
Input:
Mảng A[1 N] chứa trọng lượng của mỗi đồ vật;
Mảng C[1 N] chứa giá trị của mỗi đồ vật;
Output:
Mảng Y[1 N] : chứa dãy nhị phân xác định phương án được chọn tối ưu
Temp
Mảng X[1 N]: chứa dãy nhị phân xác định vật được chọn
D : Tổng giá trị vật chọn theo phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
X[ i ] = v;
Trang 11Thuật giải: Cập nhật lời giải tối ưu
{
S = W = 0;
for(int j =1; j<=N; j++)
if (X[j] == 1) {
S +=C[X[j]];
W+=A[X[j]];
}else
S+=B[X[j]];
if (W<=M && S>D) {
Y = X;
D= S;
}}
5 Trong cửa hàng có N mặt hàng được đánh số từ 1 đến N, mặt hàng thứ i có giá tiền là Ai.Một người cha mang theo số tiền là M cần chọn 4 mặt hàng khác nhau để làm quà cho cáccon, sao cho tổng số tiền của 4 mặt hàng này không lớn hơn số tiền M mang theo và độchênh lệch giá tiền của mặt hàng đắt nhất và mặt hàng rẻ nhất trong 4 mặt hàng được chọn
là nhỏ nhất Khai báo cấu trúc dữ liệu và viết thuật giải xác định 4 mặt hàng đó
Trang 12Khai báo cấu trúc:
Input:
Mảng A[1 N] chứa giá tiền của mỗi mặt hàng;
M : Số tiền mang theo;
Output:
Mảng Y[1 4] : chứa phương án được chọn tối ưu
Temp
Mảng X[0 4]: chứa dãy chỉ số của 4 mặt hàng được chọn
D : Độ chênh lệch theo phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
Trang 13Thuật giải: Cập nhật lời giải tối ưu
Y = X;
D= M-m;
}}
6 Có 2 đội cờ A và B, mỗi đội có N người được đánh số từ 1 đến N, tham gia thi đấu N trận,mỗi trận đấu gồm một người của đội A và một người của đội B Huấn luyện viên của đội A
tự đánh giá trình độ của người thứ i trong đội A là Ai và trình độ của người thứ i trong đội B
là Bi Hai người thi đấu có cùng trình độ thì hòa; người nào có trình độ cao hơn thì thắng.Mỗi trận nếu thắng thì được 2 điểm, hòa 1 điểm, thua 0 điểm Khai báo cấu trúc dữ liệu vàviết thuật giải sắp xếp lịch thi đấu để đội A được nhiều điểm nhất
Khai báo cấu trúc:
Input:
Mảng A[1 N] chứa trình độ mỗi vận động viên đội A;
Mảng B[1 N] chứa trình độ mỗi vận động viên đội B;
Output:
Mảng Y[1 4] : chứa phương án được chọn tối ưu
Trang 14a Mảng X[1 N]: chứa hoán vị tìm được
b Mảng F[1 N] : ghi nhớ tình trạng đã chọn của từng giá trị trong tập S={1, 2, , n}, vớiqui ước:
F[ v ] = 0 nếu v chưa chọn
F[ v ] = 1 nếu v đã chọn
− D : Chứa điểm của phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
if ( i == N )
Cập nhật lời giải tối ưu();
else { F[v]= 1;
Xác định giá trị phần tử X[ i + 1];
F[v]= 0;
}
Trang 15Thuật giải: Cập nhật lời giải tối ưu
Y = X;
D = S;
}}
7 Cho dãy A gồm N số Viết thuật toán tìm hoán vị {X1, X2, , Xn} của tập {1, 2, , n} sao choA[X1] <= A[X2] <= <= A[Xn]
Khai báo cấu trúc:
Trang 16if ( i == N )
Kiểm Tra Mảng X ();
else { F[v]= 1;
Xác định giá trị phần tử X[ i + 1];F[v]= 0;
}}
Trang 17Khai báo cấu trúc:
Tìm số tờ mệnh giá A[1] đổi số tiền M;
In nghiệm tối ưu chứa trong mảng Y;
Trang 18if (M – A[i]*j == 0)
Cập nhật lời giải tối ưu();
else {
Tìm số tờ mệnh giá A[i+1] đổi số tiền (M – A[i]*j);
X[i]=0;
}}
Y = X;
D = S;
}}
9 Có N phòng học, được đánh số từ 1 đến N, phòng học thứ i có sức chứa là P[i] sinh viên; và
K lớp học (K<=N), được đánh số từ 1 đến K, lớp học thứ j có số sinh viên là L[j] Phòng đàotạo cần xếp phòng cho các lớp, mỗi lớp 1 phòng Khai báo cấu trúc dữ liệu và viết thuật giảichọn ra K phòng để xếp cho các lớp, sao cho tổng số chỗ trống của các phòng được chọn lànhỏ nhất Cho biết các phòng đó là những phòng nào, lớp được xếp tương ứng cho mỗiphòng
Khai báo cấu trúc:
Trang 19if ( i == K )
Cập nhật lời giải tối ưu;
else { F[v]= 1;
Trang 20Chọn phòng cho lớp thứ ( i + 1 );
F[v]= 0;
}}
Y = X;
D= S;
}}
10.Tại một kho chứa hàng có N khu vực, mỗi khu vực được đánh số từ 1 đến N, khu vực thứ i
có sức chứa là V[i] container Người ta cần chất M container vào các khu vực này Khai báocấu trúc dữ liệu và viết thuật giải chọn ra các khu vực được dùng để xếp M container saocho phần còn trống sau khi đã xếp M container ở các khu vực đó là ít nhất
Khai báo cấu trúc:
Trang 21c Mảng X[1 N]: chứa dãy nhị phân xác định khu vực được chọn
d D : Số chổ trống theo phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
{
Nhập Mảng V[1 N];
Nhập( M );
Chỉ định trạng thái chọn của khu vực 1;
In lời giải tối ưu dựa trên mảng Y;
Trang 22else
S+=B[X[j]];
if (S > M && S-M<D) {
Y = X;
D= S-M;
}}
11.Trong một kho hóa chất hiện có N thùng chứa cùng một loại dung dịch Thùng thứ i hiệnchứa A[i] lít dung dịch Do các thùng chứa đã cũ, nên người ta cần bỏ một số thùng cũ vàchứa dung dịch sang những thùng chứa mới Hãy xác định số thùng cũ nhiều nhất cần loại
bỏ sao cho dung dịch của các thùng đó được đổ đầy vào các thùng chứa mới Biết rằng, sốthùng mới không hạn chế và mỗi thùng đều có dung tích là M lít
Khai báo cấu trúc:
c Mảng X[1 N]: chứa dãy nhị phân xác định thùng cũ cần loại bỏ
d D : Số thùng cũ theo phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
{
Nhập Mảng A[1 N];
Nhập( M );
Chỉ định trạng thái loại bỏ của thùng thứ (1) ;
In lời giải tối ưu dựa trên mảng Y;
}
Trang 23Thuật giải: Chỉ định trạng thái loại bỏ của thùng thứ (i)
{
for (int v =0; v<= 1; v++){
Thuật giải: Cập nhật lời giải tối ưu
Y = X;
D= S/M;
}}
12.Một dãy N số (X1 X2…XN) là một hoán vị hoàn toàn của các số từ 1 đến N nếu nó là một hoán
vị và thỏa mãn điều kiện Xi≠ i với ∀i : 1 ≤ i ≤ N Khai báo cấu trúc dữ liệu và viết thuật giảiliệt kê tất cả các hoán vị hoàn toàn của các số từ 1 đến N
Trang 24Khai báo cấu trúc:
X[ i ] = v;
if ( i == N ) {
for(int j =1; j<=N; j++) Xuất (X[j]);
}
Trang 25else {
F[v]= 1;
Xác định giá trị phần tử X[i + 1];
F[v]= 0;
}}
}
13.Có N thành phố được mã hóa bằng các số từ 1 đến N, chi phí đi từ thành phố i đến thànhphố j là C[i, j] với 1≤ i, j ≤ n Một người đang ở thành phố có mã số 1, muốn đi qua cácthành phố khác và kết thúc tại thành phố có mã số N Khai báo cấu trúc dữ liệu và viết thuậtgiải xác định danh sách các thành phố phải đi qua sao cho tổng chi phí theo hành trình này
là ít nhất và trên hành trình đó không được đi qua một thành phố nào đó quá 1 lần
Khai báo cấu trúc:
Input:
a Mảng C[1 N,1 N]: chứa chi phí
Output:
b Mảng Y[1 N] : chứa hành trình được chọn tối ưu
c D : Chi phí theo phương án tối ưu;
Thuật giải: Khởi tạo giá trị ban đầu
{
Nhập Mảng C[1 N, 1 N];
Trang 26if ( i == n-1 )
Cập nhật lời giải tối ưu;
else {
F[ v ] = 1;
Chọn thành phố cho lần đi thứ ( i + 1 );F[ v ] = 0;
}}
Trang 27D= S;
}}
14.Viết thuật toán tìm tập hợp các dấu '+’, ‘-‘ và không dấu giữa dãy số 123456789 sao chođược một biểu thức có giá trị bằng một số nguyên N cho trước
Khai báo cấu trúc:
Input:
a Số nguyên N;
Output:
b Mảng X[1 8]: chứa dãy số -1, 0, 1 ứng với dấu trừ; không dấu và dấu cộng
Thuật giải: Khởi tạo giá trị ban đầu