Cho hàm sau đây được viết bằng ngôn ngữ lập trình Python và C++, trong đó A là một mảng gồm n số nguyên dương:
Python:
def F(A, n):
j = 0
for i in range(n):
if A[i] % 2 == 0:
if A[j] % 2 != 0:
t = A[i]
A[i] = A[j]
A[j] = t
j = j + 1
return A[0] + A[n - 1]C++:
int F(int A[], int n) {
int j = 0;
for (int i = 0; i < n; i++)
if (A[i] % 2 == 0) {
if (A[j] % 2 != 0) {
int t = A[i];
A[i] = A[j];
A[j] = t;
}
j = j + 1;
}
return A[0] + A[n - 1];
}Sau khi chọn một trong hai ngôn ngữ lập trình Python hoặc C++ để tìm hiểu hàm trên, có các ý kiến sau:
- a)(Đáp án: Sai)
Hàm F có đúng một tham số.
- b)(Đáp án: Đúng)
Sau khi thực hiện hàm F, mảng A không tồn tại phần tử có giá trị chẵn nào có chỉ số lớn hơn chỉ số của phần tử có giá trị lẻ.
- c)(Đáp án: Đúng)
Nếu nhận vào hai đối số, mảng A là (5, 6, 7, 4, 2, 3, 1) và n = 7, thì hàm F trả về giá trị 7.
- d)(Đáp án: Sai)
Với mảng A bất kì, giả sử mảng B được tạo ra bằng cách sao chép mảng A rồi hoán đổi vị trí của một số phần tử thì kết quả trả về của hai lần gọi hàm F(A, n) và F(B, n) là bằng nhau.
Lời giải
Đáp án đúng: a) Sai, b) Đúng, c) Đúng, d) Sai.
a) Sai: hàm F có hai tham số là A và n.
b) Đúng: biến j đánh dấu vị trí cho số chẵn tiếp theo; mỗi khi gặp A[i] chẵn mà A[j] lẻ thì đổi chỗ. Sau khi chạy, mọi số chẵn đứng trước mọi số lẻ.
c) Đúng: với A = (5, 6, 7, 4, 2, 3, 1), sau khi chạy A trở thành (6, 4, 2, 5, 7, 3, 1); hàm trả về A[0] + A[6] = 6 + 1 = 7.
d) Sai: kết quả trả về phụ thuộc thứ tự phần tử. Ví dụ A = (2, 4, 1) cho 2 + 1 = 3, còn B = (4, 2, 1) cho 4 + 1 = 5.