Cho B = { 1, 0, 1, 0, 1, 0, 1, 1, 1, 0}, n=10. Kết quả nào đúng trong số những kết quả dưới đây sau khi thực hiện thuật toán:
Type Mang= array[1..10] of Integer;
Function Test(B:mang; n:integer): mang;
Var i:integer;
Begin
i:=n-1;
While (i>=0) and (B[i]=1) do
Begin B[i]:=0; i:=i-1; End;
B[i]:= 1;
End;
Trả lời:
Đáp án đúng: B
Đề bài cho một mảng B gồm các số nguyên (0 hoặc 1) và yêu cầu thực hiện một thuật toán trên mảng này. Thuật toán này có vẻ như đang thực hiện phép cộng 1 vào một số nhị phân được biểu diễn bởi mảng B.
Chúng ta hãy xem xét từng bước của thuật toán:
1. **Khởi tạo:** `i := n - 1;` (i = 9 trong trường hợp này, vì n = 10). i là chỉ số của phần tử cuối cùng trong mảng.
2. **Vòng lặp `while`:** `While (i >= 0) and (B[i] = 1) do Begin ... End;` Vòng lặp này duyệt từ cuối mảng về đầu mảng, miễn là chỉ số i còn hợp lệ (lớn hơn hoặc bằng 0) và phần tử tại vị trí i bằng 1.
- Bên trong vòng lặp, `B[i] := 0;` đặt phần tử tại vị trí i thành 0.
- `i := i - 1;` giảm chỉ số i để duyệt sang phần tử kế tiếp về phía đầu mảng.
3. **Gán `B[i] := 1;`**: Sau khi vòng lặp `while` kết thúc (hoặc là i trở thành âm, hoặc là B[i] khác 1), dòng lệnh này đặt phần tử tại vị trí i thành 1.
Bây giờ, hãy áp dụng thuật toán này vào mảng B đã cho: B = { 1, 0, 1, 0, 1, 0, 1, 1, 1, 0}
- **Bước 1:** i = 9, B[9] = 0. Vòng lặp `while` không được thực hiện vì B[9] không bằng 1.
- **Bước 2:** B[9] được gán thành 1. Vậy B[9] = 1.
Kết quả cuối cùng của mảng B là: { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1}
Vậy đáp án đúng là: Test(B,n) = { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1}
Bộ 525 câu hỏi trắc nghiệm ôn thi môn Toán rời rạc có đáp án dưới đây sẽ là tài liệu ôn tập hữi ích dành cho các bạn sinh viên. Mời các bạn cùng tham khảo!
30 câu hỏi 60 phút





