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

Tài liệu Ôn thi cao học môn Kỹ thuật lập trình PTIT

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 (157.84 KB, 14 trang )

ĐỀ THI MẪU 1
MÔN KỸ THUẬT LẬP TRÌNH
Câu 1
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("\n Buoc %d:",count);
for(int i=0; i}
void main(void){
int i, j;
for(i=0; ifor(j=i+1; jif(A[i]>A[j]){
A[i]=A[i] + A[j];
A[j]=A[i]-A[j];
A[i]=A[i] – A[j];
}
}
Result(A,n);
}
}

Câu 2
Một xâu nhị phân độ dài n được gọi là thuận nghịch hay đối xứng nếu đảo ngược xâu nhị phân đó ta
vẫn nhận được chính nó. Cho số tự nhiên n (n nhập từ bàn phím). Hãy viết chương trình liệt kê tất cả
các xâu nhị phân thuận nghịch có độ dài n. Các xâu nhị phân tìm được ghi lại trong file ketqua.out
theo khôn dạng:



Dòng đầu tiên ghi lại số K là số các xâu thuận nghịch có độ dài n tìm được;



K dòng kế tiếp ghi lại mỗi dòng một xâu nhị phân thuận nghịch có độ dài n. Hai phần tử khác
nhau của xâu thuận nghịch được ghi cách nhau một vài khoảng trống.

Ví dụ với n = 4 ta tìm được 4 xâu nhị phân thuận nghịch như dưới đây.
ketqua.out
4
0
0
0
0
0
1
1
0
1
0
0
1
1
1
1
1


Câu 3

Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng
ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi
cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:
• Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số
được ghi cách nhau bởi một vài ký tự trống;
• M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được
ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một
danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối
với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file dske.in biểu diễn đồ thị dưới dạng danh sách dinh. Hãy viết chương trình chuyển đổi biểu
diễn đồ thị thành các file dưới dạng ma trận kề (mtke.out) và danh sách cạnh (dscanh.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file dske.in như dưới đây sẽ cho ta các file
mtke.out và dscanh.out tương ứng.
dske.in
5
2
1
1
2

3
4
5

3

mtke.out
5
0
1
1
0
1
0
0
1
0
0

1
0
0
0
1

0
1
0
0
0

0
0
1

0
0

dscanh.out
5
1
1
2
3

4
2
3
4
5

Câu 4
Cho mạng gồm N máy tính. Biết giữa hai máy tính đều được nối với nhau bằng hệ thống cáp trực tiếp
hoặc gián tiếp thông qua một số máy tính trung gian. Để tiết kiệm, người ta nghĩ cách loại bỏ đi một số
đường cáp sao cho ta vẫn nhận được một mạng máy tính liên thông. Hãy viết chương trình bỏ các
đường cáp cho mạng máy tính sao cho hai điều kiện sau được thỏa mãn:
• Số các đường cáp nối giữa các máy tính được loại bỏ nhiều nhất;
• Số các đường cáp nối với máy tính thứ K (1≤K≤N) là ít nhất.
Dữ liệu vào cho bởi file mang.in theo khuôn dạng sau:
• Dòng đầu tiên ghi lại hai số tự nhiên N và K. Hai số được viết cách nhau bởi một vài khoảng
trống.
• N dòng kế tiếp, mỗi dòng ghi lại danh sách các máy tính có đường nối trực tiếp với mỗi máy
tính. Hai máy tính khác nhau của cùng một danh sách được viết cách nhau bởi một vài khoảng
trống;
Mạng máy tính liên thông với tối thiểu các đường cáp nối tìm được ghi lại trong file ketqua.out theo

khuôn dạng sau:
• Dòng đầu tiên ghi lại số N là số máy tính của mạng và M và số các đường cáp còn lại nối các
máy tính;




M dòng kế tiếp, mỗi dòng ghi lại đường cáp nối trực tiếp từ máy tính i đến các máy tính j. Giá
trị i và j được viết cách nhau một vài khoảng trống.
Ví dụ với mạng máy tính được cho trong file mang.in sẽ cho ta file ketqua.out tương ứng.
mang.in
5
1
2
3
1
3
1
2
1
3
1
2

4
5
4
5
4


5

ketqua.out
5
1
2
3
4

4
2
3
4
5


ĐỀ THI MẪU 2
MÔN KỸ THUẬT LẬP TRÌNH
Câu 1
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.

#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("\n Buoc %d:",count);
for(int i=0; i}
void main(void){
int i, j, temp;

for(i=1; ifor(j=i-1; j>=0 && temp < A[j]; j--){
A[j+1]=A[j];
}
A[j+1] = temp;Result(A,n);
} getch();
}

Câu 2
Cho một hình chữ nhật gồm n × m hình vuông đơn vị (n, m được nhập từ bàn phím). Hãy liệt kê tất cả
các đường đi từ đỉnh cuối của ô vuông cuối cùng phía bên trái đến đỉnh đầu của ô vuông trên cùng
phía bên phải. Biết mỗi bước đi chỉ đuợc phép dịch chuyển sang bên phải (ký hiệu là bước 1) hoặc lên
trên (ký hiệu là bước 0) theo các cạnh của hình vuông đơn vị. Các đường đi tìm được ghi lại trong file
ketqua.out theo khuôn dạng sau:


Dòng đầu tiên ghi lại một số tự nhiên là số các đường đi tìm được;



Những dòng kế tiếp mỗi dòng ghi lại một đường đi, bước dịch phải (1) và bước lên trên (0) của
mỗi đường đi, hai bước khác nhau được ghi cách nhau bởi một vài ký tự trống.

Ví dụ với n = 3, m = 2 như hình vuông dưới đây sẽ cho ta file ketqua.out tương ứng.
Ketqua.Out
10
0
0
0
0

1
1
1
1
1
1

0
1
1
1
0
0
0
1
1
1

1
0
1
1
0
1
1
0
0
1

1

1
0
1
1
0
1
0
1
0

1
1
1
0
1
1
0
1
0
0


Câu 3
Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng
ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi
cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:

• Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số
được ghi cách nhau bởi một vài ký tự trống;
• M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được
ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một
danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối
với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file mtke.in biểu diễn đồ thị dưới dạng ma trận kề. Hãy viết chương trình chuyển đổi biểu diễn
đồ thị thành các file dưới dạng danh sách cạnh (dscanh.out) và danh sách kề (dske.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file mtke.in như dưới đây sẽ cho ta các file
dscanh.out và dske.out tương ứng.
mtke.in
5
0
1
1
0
0

1
0
0
1
0

1
0
0

0
1

0
1
0
0
0

0
0
1
0
0

dscanh.out
5
1
1
2
3

4
2
3
4
5

dske.out
5

2
1
1
2
3

3
4
5

Câu 4
Cho mạng gồm N máy tính. Biết giữa hai máy tính đều được nối với nhau bằng hệ thống cáp trực tiếp
hoặc gián tiếp thông qua một số máy tính trung gian. Để tiết kiệm, người ta nghĩ cách loại bỏ đi một số
đường cáp sao cho ta vẫn nhận được một mạng máy tính liên thông. Hãy viết chương trình bỏ các
đường cáp cho mạng máy tính sao cho hai điều kiện sau được thỏa mãn:
• Số các đường cáp nối giữa các máy tính được loại bỏ nhiều nhất;
• Số các đường cáp nối với máy tính thứ K (1≤K≤N) là nhiều nhất.
Dữ liệu vào cho bởi file mang.in theo khuôn dạng sau:
• Dòng đầu tiên ghi lại hai số tự nhiên N và K. Hai số được viết cách nhau bởi một vài khoảng
trống.
• N dòng kế tiếp, mỗi dòng ghi lại danh sách các máy tính có đường nối trực tiếp với mỗi máy
tính. Hai máy tính khác nhau của cùng một danh sách được viết cách nhau bởi một vài khoảng
trống;
Mạng máy tính liên thông với tối thiểu các đường cáp nối tìm được ghi lại trong file ketqua.out theo
khuôn dạng sau:
• Dòng đầu tiên ghi lại số N là số máy tính của mạng và M và số các đường cáp còn lại nối các
máy tính;





M dòng kế tiếp ghi lại mỗi đường cáp nối trực tiếp từ máy tính i đến máy tính j. Giá trị i và j
được viết cách nhau một vài khoảng trống.
Ví dụ với mạng máy tính được cho trong file mang.in sẽ cho ta file ketqua.out tương ứng.
mang.in
5
1
2
3
1
3
1
2
1
3
1
2

4
5
4
5
4

5

ketqua.out
5
1
1

1
1

4
2
3
4
5


ĐỀ THI MẪU 3
MÔN KỸ THUẬT LẬP TRÌNH
Câu 1
Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("\n Ket qua buoc %d:",count);
for(int i=0; i}
void main(void){
int i, j, temp;
for(i=1; ifor(j=n-1; j>=i; j--){
if (A[j-1] > A[j]){
temp = A[j-1]; A[j-1] = A[j]; A[j] = temp;
}
}
Result(A,n);

} getch();
}

Câu 2
Cho dãy gồm n số tự nhiên phân biệt a1, a2, .., an và số tự nhiên B. Hãy viết chương trình liệt kê tất cả
n


các phần tử của tập D = ( x1 , x 2 , , x n ) : ∑ ai xi = B, xi ∈ { 0,1} , i = 1,2,..., n  ;
i =1


Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau:


Dòng đầu tiên ghi lại hai số tự nhiên n và B. Hai số được viết cách nhau bởi một vài khoảng
trống.



Dòng kế tiếp ghi lại n số nguyên dương a1, a2,..,an. Hai số khác nhau được viết cách nhau bởi
một vài kí tự trống.

Kết quả ra ghi lại trong file ketqua.out theo khuôn dạng sau:


Dòng đầu tiên ghi lại số tự nhiên k là số phần tử của tập D.




k dòng tiếp theo mỗi dòng ghi lại một vector nhị phân x = (x1, x2 ,.., xn) là phần tử của D. Hai
thành phần khác nhau của vector x được viết cách nhau bởi một vài khoảng trống.

Ví dụ với n =7, B = 25, { a1, a2, a3, a4, a5, a6, a7} = {5, 10, 15, 20, 25, 30, 35} trong file data.in sẽ
cho ta 3 phần tử của tập D tương ứng với 3 vector nhị phân độ dài n trong file ketqua.out dưới đây:
Data.in
7
5

25
10
35

Ketqua.Out
15

20

25

30

3
0
1
0

0
0
1


0
0
1

0
1
0

1
0
0

0
0
0

0
0
0


Câu 3
Cho đồ thị vô hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng
ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi
cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách cạnh:

• Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị, hai số
được ghi cách nhau bởi một vài ký tự trống;
• M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi cạnh được
ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một
danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối
với nó (đỉnh cô lập) được ghi giá trị 0.
Cho file canh.in biểu diễn đồ thị dưới dạng danh sách cạnh. Hãy viết chương trình chuyển đổi biểu
diễn đồ thị thành các file dưới dạng ma trận kề (mtke.out) và danh sách kề (dske.out).
Ví dụ đồ thị gồm 5 đỉnh, 5 cạnh được biểu diễn trong file mtke.in như dưới đây sẽ cho ta các file
dscanh.out và dske.out tương ứng.
canh.in
5
1
1
2
3

4
2
3
4
5

mtke.out
5
01100
10010

10001
01000
00100

dske.out
5
2
3
1
4
1
5
2
3

Câu 4
Một người du lịch cần đi qua N thành phố (N≤100). Xuất phát tại thành phố số 1, người du lịch muốn
qua tất cả các thành phố còn lại, mỗi thành phố đúng một lần rồi trở lại thành phố ban đầu. Biết chi phí
đi lại từ thành phố thứ i đến thành phố thứ j là cij. Hãy viết chương trình tìm hành trình có chi phí tối
đa cho người du lịch.
Dữ liệu vào cho bởi file chiphi.in theo khuôn dạng sau:
• Dòng đầu tiên ghi lại số tự nhiên N là cấp của ma trận chi phí vuông C = (cij);
• N dòng kế tiếp ghi lại ma trận vuông C = (cij). Hai phần tử khác nhau của ma trận C = (cij)
được ghi cách nhau bởi một vài khoảng trống.
Hành trình có chi phí lớn nhất tìm được ghi lại trong file cucdai.out theo khuôn dạng:
• Dòng đầu tiên ghi lại giá trị chi phí lớn nhất của hành trình tìm được;
• Dòng kế tiếp, ghi lại hành trình của người du lịch. Hai thành phố khác nhau của hành trình
được ghi cách nhau một vài khoảng trống.
Ví dụ về dưới đây sẽ minh họa cho file chiphi.in và cucdai.out của bài toán.




ĐỀ THI MẪU 4
MÔN KỸ THUẬT LẬP TRÌNH
Câu 1
Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, .., aN } và số tự nhiên K ( K≤N≤100). Hãy viết
chương trình liệt kê tất cả các dãy con K phần tử giảm của dãy số A[]. Dữ liệu vào cho bởi file
dayso.in theo khuôn dạng sau:

Dòng đầu tiên ghi lại hai số tự nhiên N, K. Hai số được viết cách nhau một
vài khoảng trống;

Những dòng kế tiếp ghi lại N số nguyên của dãy số A[], hai số khác nhau
được viết cách nhau một vài khoảng trống.
Các dãy con K phần tử giảm dần của dãy số A[] tìm được ghi lại trong file ketqua.out theo
khuôn dạng:
• Dòng đầu tiên ghi lại số tự nhiên M là số các dãy con K phần tử giảm dần của dãy số A[] tìm
được;
• M dòng kế tiếp, mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được viết
cách nhau bởi một vài khoảng trống.
Ví dụ với file dayso.in dưới đây sẽ cho ta file ketqua.out tương ứng.
dayso.in
ketqua.out
5
3
5
5
2
4
3

1
5
2
1
5
4
1
5
3
1
5
4
3
4
3
1
Câu 2
Cho ma trận vuông C = (cij) cấp N (1≤ i, j ≤ N≤100) gồm N2 số tự nhiên (các số không nhất thiết phải
khác nhau) ghi lại trong file matran.in theo khuôn dạng sau :
• Dòng đầu tiên ghi lại số tự nhiên N là cấp của ma trận vuông C;
• N dòng kế tiếp ghi lại ma trận vuông C = (cij). Hai phần tử khác nhau của ma trận được ghi
cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử
này là nhỏ nhất. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
• Dòng đầu tiên ghi lại tổng giá trị nhỏ nhất của N phần tử tìm được;
• N dòng kế tiếp, mỗi dòng ghi lại ba số i, j, cij tương ứng với chỉ số hàng, chỉ số cột và giá trị
phần tử tương ứng của ma trận. Ba số được viết cách nhau một vài khoảng trống.
Ví dụ về file matran.in và ketqua.out:
matran.in
6

10
64
57
29
18
34
20
19
30
16
57
49
40
16
11
29
21
46
26
21

15
12
19
18

ketqua.out
82
1
1

2
6
3
4
4
5

10
12
16
21


28
15

16
12

11
15

21
48

21
37

37
30


5
6

3
2

11
12

Câu 3
Cho ma trận vuông C = (cij) cấp N (1≤ i, j ≤ N≤100) gồm N2 số tự nhiên (các số không nhất thiết phải
khác nhau) ghi lại trong file matran.in theo khuôn dạng sau :
• Dòng đầu tiên ghi lại số tự nhiên N là cấp của ma trận vuông C;
• N dòng kế tiếp ghi lại ma trận vuông C = (cij); Hai phần tử khác nhau của ma trận được
ghi cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy trên mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử
này là lớn nhất. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
• Dòng đầu tiên ghi lại tổng giá trị nhỏ nhất của N phần tử tìm được;
• N dòng kế tiếp, mỗi dòng ghi lại ba số i, j, cij tương ứng với chỉ số hàng, chỉ số cột và giá
trị phần tử tương ứng của ma trận. Ba số được viết cách nhau một vài khoảng trống.
Ví dụ về file viec.in và ketqua.out:
matran.in
ketqua.out
6
238
10
14
27
29

18
27
1
6
27
34
20
19
34
16
12
2
1
34
57
37
40
57
11
19
3
4
57
29
21
46
26
21
18
4

3
46
27
37
11
21
21
37
5
2
37
55
12
15
48
37
35
6
5
37
Câu 4
Cho ma trận vuông Ci,j cấp N (1≤ i, j ≤ N≤100) gồm N2 số tự nhiên và số tự nhiên K(Các số không
nhất thiết phải khác nhau) ghi lại trong file matran.in theo khuôn dạng sau:
• Dòng đầu tiên ghi lại số tự nhiên N và K. Hai số được viết cách nhau một vài khoảng
trống;
• N dòng kế tiếp ghi lại ma trận vuông Ci,j; Hai phần tử khác nhau của ma trận được ghi
cách nhau bởi một vài khoảng trống.
Hãy viết chương trình lấy mỗi hàng, mỗi cột duy nhất một phần tử sao cho tổng các phần tử này
đúng bằng K. Kết quả tìm được ghi lại trong file ketqua.out theo khuôn dạng:
• Dòng đầu tiên ghi lại số các nghiệm tìm được của bài toán.

• Những dòng kế tiếp, mỗi dòng ghi lại N số là một phương án của bài toán, số thứ i ghi lại
giá trị j tương ứng với chỉ số cột của phần tử được lựa chọn. Các số được viết cách nhau
một vài khoảng trống.
Ví dụ về file viec.in và ketqua.out:
matranc.in
ketqua.out
6
180
6
10
64
57
29
18
15
2
1
4
6
3
5
34
20
19
30
16
12
3
6
1

5
4
2
57
49
40
16
11
19
3
6
2
4
5
1
29
21
46
26
21
18
4
3
2
6
1
5
28
16
11

21
21
37
5
3
2
6
1
4


15
12
15
48
ĐỀ THI MẪU 5
MÔN KỸ THUẬT LẬP TRÌNH

37

30

6

3

2

5


1

4

Câu 1
Cho dãy A[] gồm N số tự nhiên khác nhau và số tự nhiên K. Hãy viết chương trình liệt kê tất cả các
dãy con của dãy số A[] sao cho tổng các phần tử trong dãy con đó đúng bằng K. Dữ liệu vào cho bởi
file dayso.in theo khuôn dạng sau:


Dòng đầu tiên ghi lại số tự nhiên N và K; hai số được viết cách nhau bởi một vài khoảng trống;



Dòng kế tiếp ghi lại N số của dãy số A[], hai số được viết cách nhau một vài khoảng trống.

Các dãy con thoả mãn điều kiện tìm được ghi lại trong file ketqua.out theo khuôn dạng sau:


Dòng đầu tiên ghi lại số các dãy con có tổng các phần tử đúng bằng K tìm được;



Những dòng kế tiếp mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được
viết cách nhau bởi một vài khoảng trống.

Ví dụ dưới đây sẽ minh hoạ cho file dayso.in và ketqua.out của bài toán.
Dayso.in
5
50

5
10

15

20

25

Ketqua.out
3
10
15
5
20
5
10

25
25
15

20

Câu 2
Cho ai, ci , B, N (i =1, 2,..,N; N≤100) là những số nguyên dương và tập hợp
N


D =  X = ( x1 , x2 ,.., x N ) : ∑ a j x j ≤ B; x j = 0,1.

j =1



Hãy viết chương trình tìm phương án tối ưu XOPT =(x1,x2,..,xN) và giá trị tối ưu FOPT=F(XOPT)
của hàm mục tiêu
N

F ( x1 , x 2 ,.., x N ) = ∑ c j x j → max ; với X = ( x1 , x 2 ,.., x N ) ∈ D .
j =1

Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:


Dòng đầu tiên ghi lại số tự nhiên N và B. Hai số được viết cách nhau một vài khoảng trống;



Dòng kế tiếp ghi lại N số cj (j=1,2,..,N). Hai số được viết cách nhau một vài khoảng trống;



Dòng kế tiếp ghi lại N số aj (j=1,2,..,N). Hai số được viết cách nhau một vài khoảng trống;

Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn dạng:


Dòng đầu tiên ghi lại giá trị tối ưu FOPT;




Dòng kế tiếp ghi lại phương án tối ưu XOPT. Hai phần tử khác nhau của phương án tối ưu
được viết cách nhau bởi một vài khoảng trống.


Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán.
data.in
ketqua.out
4
10
13
6
5
3
7
1
0
0
1
5
4
6
5
Câu 3
Cho đồ thị có hướng G =<V,E> gồm N đỉnh và M cạnh. Ta định nghĩa khuôn dạng lưu trữ đồ thị bằng
ma trận kề, danh sách cạnh, danh sách kề dưới dạng file như sau:
Khuôn dạng file ma trận kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp ghi lại ma trận kề của đồ thị, hai phần tử khác nhau của ma trận kề được ghi
cách nhau bởi một vài ký tự trống.

Khuôn dạng file danh sách cạnh:

Dòng đầu tiên ghi lại số tự nhiên N và M tương ứng với số đỉnh và số cạnh của đồ thị,
hai số được ghi cách nhau bởi một vài ký tự trống;

M dòng kế tiếp mỗi dòng ghi lại một cạnh của đồ thị, đỉnh đầu và đỉnh cuối của mỗi
cạnh được ghi cách nhau bởi một vài ký tự trống.
Khuôn dạng file danh sách kề:
• Dòng đầu tiên ghi lại số tự nhiên N là số đỉnh của đồ thị;
• N dòng kế tiếp mỗi dòng ghi lại danh sách kề của đỉnh tương ứng. Hai đỉnh trong cùng một
danh sách kề được phân biệt với nhau bằng một hoặc vài kí tự trống, đỉnh không có cạnh nối
với nó được ghi giá trị 0.
Cho file dske.in biểu diễn đồ thị dưới dạng danh sách kề. Hãy viết chương trình chuyển đổi biểu
diễn đồ thị thành các file dưới dạng danh sách cạnh (dscanh.out) và danh sách kề (dske.out).
Ví dụ đồ thị gồm 5 đỉnh, 7 cạnh được biểu diễn trong file dske.in như dưới đây sẽ cho ta các file
mtke.out và dscanh.out tương ứng.
dske.in
5
2
3
4
1
5
3
2

mtke.out
5
0 1 0 0
0 0 1 1

1 0 0 0
0 0 0 0
0 1 1 0

0
0
0
1
0

dscanh.out
5
7
1
2
2
3
2
4
3
1
4
5
5
2
5
3


Câu 4

Cho dãy A[] gồm N số tự nhiên khác nhau, số tự nhiên K và số tự nhiên B. Hãy viết chương trình liệt
kê tất cả các dãy con K phần tử của dãy số A[] sao cho tổng các phần tử trong dãy con đó đúng bằng
B. Dữ liệu vào cho bởi file dayso.in theo khuôn dạng sau:


Dòng đầu tiên ghi lại ba số tự nhiên N, K, B; Ba số được viết cách nhau bởi một vài khoảng
trống;



Dòng kế tiếp ghi lại N số của dãy số A[], hai số được viết cách nhau một vài khoảng trống.

Các dãy con K phần tử thoả mãn điều kiện tìm được ghi lại trong file ketqua.out theo khuôn dạng sau:


Dòng đầu tiên ghi lại số các dãy con K phần tử có tổng các phần tử đúng bằng tìm được;



Những dòng kế tiếp mỗi dòng ghi lại một dãy con. Hai phần tử khác nhau của dãy con được
viết cách nhau bởi một vài khoảng trống.

Ví dụ dưới đây sẽ minh hoạ cho file dayso.in và ketqua.out của bài toán.
Dayso.in
5
3
5
10

50

15

20

25

Ketqua.out
2
10
15
5
20

25
25



×