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)Sai
Hàm F có đúng một tham số.
- b)Đú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)Đú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)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
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.