Bài 27 Thực hành thiết kế chương trình theo phương pháp làm mịn dần

Lớp 11Tin Học18 câu hỏiBài tập

Phần 1

Câu 1

(Câu 27.1 trang 80 SBT Tin học 11) Cho A = [1, 3, 5, 0, 1, 2, 3, 4, 10, 1]. Cần tìm một phần tử được lặp lại nhiều nhất đồng thời với số lần lặp trong A. Kết quả đúng là gì?
A(1, 3).
B(3, 2).
C(5, 1).
D(10, 1).

Câu 2

(Câu 27.2 trang 80 SBT Tin học 11) Với bài toán sắp xếp danh sách A, nếu xét tất cả các cặp chỉ số (i, j) với i < j, sau đó nếu A[i] > A[j] thì đổi chỗ hai phần tử này, kết quả cuối cùng là gì?
ADanh sách A được sắp xếp theo thứ tự tăng dần.
BDanh sách A được sắp xếp theo thứ tự giảm dần.
CDanh sách A không thay đổi.
DChỉ phần tử đầu tiên và cuối cùng của A được đổi chỗ.

Câu 3

(Câu 27.3 trang 80 SBT Tin học 11) Cho trước dãy số A. Điều kiện nào sau đây dùng để kiểm tra A là dãy đơn điệu tăng?
AVới mọi i từ 0 đến n - 2, A[i] ≤ A[i+1].
BVới mọi i từ 0 đến n - 2, A[i] > A[i+1].
CChỉ cần A[0] ≤ A[n-1].
DChỉ cần tất cả các phần tử của A đều là số nguyên.

Câu 4

(Câu 27.5 trang 80 SBT Tin học 11) Cho trước hai xâu kí tự s1 và s2. Cần tìm xâu s dài nhất sao cho s đồng thời là phần đầu của cả hai xâu s1 và s2. Xâu s đó được gọi là gì?
ATiền tố chung dài nhất của s1 và s2.
BHậu tố chung dài nhất của s1 và s2.
CXâu con bất kì của s1 và s2.
DXâu đảo ngược của s1 và s2.

Phần 2

Câu 1

(Câu 27.1 trang 80 SBT Tin học 11) Thiết kế bài toán tìm phần tử được lặp lại nhiều nhất trong dãy A theo phương pháp làm mịn dần.
a)Có thể thiết lập hàm lap(x) để tính số lần xuất hiện của phần tử x trong A.
b)Có thể thiết lập dãy B, trong đó B[i] là số lần xuất hiện của A[i] trong A.
c)Sau khi có dãy B, có thể tìm giá trị lớn nhất của B để xác định số lần lặp nhiều nhất.
d)Chỉ cần lấy phần tử cuối cùng của A là chắc chắn tìm được phần tử lặp lại nhiều nhất.

Câu 2

(Câu 27.1 trang 80 SBT Tin học 11) Chi tiết hoá hàm lap(x) dùng để đếm số lần xuất hiện của phần tử x trong dãy A.
a)Có thể khởi tạo biến đếm d = 0.
b)Có thể duyệt lần lượt từng phần tử y trong A.
c)Nếu y == x thì tăng biến đếm d thêm 1.
d)Hàm lap(x) phải trả về phần tử nhỏ nhất trong dãy A.

Câu 3

(Câu 27.2 trang 80 SBT Tin học 11) Chi tiết hoá thuật toán sắp xếp danh sách A bằng cách xét tất cả các cặp chỉ số (i, j) với i < j.
a)Có thể dùng vòng lặp ngoài với i chạy từ 0 đến len(A) - 2.
b)Có thể dùng vòng lặp trong với j chạy từ i + 1 đến len(A) - 1.
c)Nếu A[i] > A[j] thì đổi chỗ A[i] và A[j].
d)Nếu A[i] < A[j] thì luôn phải xoá A[j] khỏi danh sách.

Câu 4

(Câu 27.2 trang 80 SBT Tin học 11) Tìm hiểu ý nghĩa của cách sắp xếp bằng cách xét các cặp chỉ số.
a)Sau khi xét xong các cặp có i = 0, phần tử nhỏ nhất của danh sách sẽ được đưa về vị trí đầu tiên.
b)Sau khi xét xong các cặp có i = 1, phần tử nhỏ thứ hai sẽ được đưa về vị trí thứ hai.
c)Quá trình tiếp tục cho đến khi các phần tử trong danh sách được sắp xếp tăng dần.
d)Thuật toán này chỉ kiểm tra danh sách đã sắp xếp hay chưa, không làm thay đổi thứ tự các phần tử.

Câu 5

(Câu 27.3 trang 80 SBT Tin học 11) Thiết kế thuật toán kiểm tra dãy A có phải là dãy đơn điệu tăng hay không.
a)Có thể giả sử ban đầu dãy A là đơn điệu tăng.
b)Cần duyệt các cặp phần tử liên tiếp A[i] và A[i+1].
c)Nếu gặp A[i] > A[i+1] thì có thể kết luận dãy không đơn điệu tăng.
d)Chỉ cần kiểm tra hai phần tử đầu tiên của A là đủ để kết luận toàn bộ dãy đơn điệu tăng.

Câu 6

(Câu 27.3 trang 80 SBT Tin học 11) Chi tiết hoá chương trình kiểm tra dãy đơn điệu tăng.
a)Có thể dùng vòng lặp for i in range(len(A)-1) để duyệt các cặp phần tử liền kề.
b)Nếu A[i] > A[i+1] thì trả về False hoặc thông báo dãy không đơn điệu tăng.
c)Nếu duyệt hết mà không gặp cặp nào vi phạm thì trả về True hoặc thông báo dãy đơn điệu tăng.
d)Nếu A[0] nhỏ hơn A[1] thì chắc chắn toàn bộ dãy A là đơn điệu tăng.

Câu 7

(Câu 27.4 trang 80 SBT Tin học 11) Cho trước dãy số A bất kì. Cần thiết lập dãy số B có các phần tử khác nhau từng đôi một và mỗi số của B đều có thể phân tích thành tổng của hai số lấy từ dãy A.
a)Có thể thiết lập dãy B ban đầu là dãy rỗng.
b)Có thể duyệt tất cả các cặp chỉ số (i, j) của dãy A.
c)Với mỗi cặp chỉ số, tính tổng A[i] + A[j] rồi bổ sung vào B nếu tổng đó chưa có trong B.
d)Dãy B được tạo bằng cách sao chép nguyên dãy A, không cần xét tổng của hai phần tử.

Câu 8

(Câu 27.4 trang 80 SBT Tin học 11) Tìm hiểu cách đảm bảo các phần tử của dãy B khác nhau từng đôi một.
a)Trước khi thêm một giá trị mới vào B, cần kiểm tra giá trị đó đã có trong B hay chưa.
b)Nếu giá trị A[i] + A[j] chưa có trong B thì thêm giá trị đó vào B.
c)Nếu giá trị A[i] + A[j] đã có trong B thì không cần thêm lại.
d)Muốn các phần tử của B khác nhau từng đôi một thì phải thêm mọi tổng vào B, kể cả tổng đã xuất hiện trước đó.

Câu 9

(Câu 27.5 trang 80 SBT Tin học 11) Thiết kế thuật toán tìm tiền tố chung dài nhất của hai xâu s1 và s2.
a)Có thể thiết lập xâu kết quả s ban đầu là xâu rỗng.
b)Cần duyệt đồng thời các kí tự của s1 và s2 từ trái sang phải.
c)Khi gặp vị trí đầu tiên mà hai kí tự khác nhau thì dừng việc duyệt.
d)Cần duyệt từ phải sang trái vì tiền tố là phần cuối của xâu.

Câu 10

(Câu 27.5 trang 80 SBT Tin học 11) Chi tiết hoá quá trình tìm xâu s dài nhất là phần đầu của cả s1 và s2.
a)Có thể duyệt i từ 0 đến min(len(s1), len(s2)) - 1.
b)Nếu s1[i] == s2[i] thì nối kí tự đó vào xâu kết quả s.
c)Nếu s1[i] != s2[i] thì dừng lại và trả về xâu s hiện có.
d)Khi hai kí tự khác nhau, cần xoá toàn bộ hai xâu s1 và s2.

Câu 11

(Câu 27.6 trang 81 SBT Tin học 11) Viết chương trình nhập danh sách họ tên học sinh từ tệp HS.inp, sau đó nhập một họ từ bàn phím và kiểm tra trong lớp có bao nhiêu bạn mang họ đó.
a)Có thể mở tệp HS.inp để đọc danh sách họ tên học sinh.
b)Mỗi dòng trong tệp HS.inp ghi tên đầy đủ của một học sinh.
c)Có thể dùng split() để tách họ tên đầy đủ thành các thành phần, trong đó họ thường là thành phần đầu tiên.
d)Muốn kiểm tra họ Nguyễn thì chỉ cần kiểm tra kí tự cuối cùng của tên học sinh.

Câu 12

(Câu 27.6 trang 81 SBT Tin học 11) Tìm hiểu cách đếm số học sinh có họ được nhập từ bàn phím.
a)Có thể khởi tạo biến đếm bằng 0.
b)Với mỗi họ tên trong danh sách, lấy phần họ và so sánh với họ cần tìm.
c)Nếu phần họ trùng với họ cần tìm thì tăng biến đếm thêm 1.
d)Nếu một học sinh có tên đệm trùng với họ cần tìm thì luôn được tính là học sinh mang họ đó.

Câu 13

(Câu 27.7 trang 81 SBT Tin học 11) Bài toán tương tự Câu 27.6, nhưng nhập tên và kiểm tra theo tên của học sinh.
a)Có thể đọc danh sách họ tên học sinh từ tệp HS.inp.
b)Có thể dùng split() để tách họ tên thành các thành phần.
c)Tên của học sinh thường là thành phần cuối cùng sau khi tách họ tên đầy đủ.
d)Muốn kiểm tra tên học sinh thì chỉ cần so sánh với thành phần đầu tiên của họ tên.

Câu 14

(Câu 27.7 trang 81 SBT Tin học 11) Tìm hiểu cách đếm số học sinh có tên được nhập từ bàn phím.
a)Có thể khởi tạo biến đếm để lưu số học sinh có tên cần tìm.
b)Với mỗi họ tên, lấy thành phần cuối cùng làm tên để so sánh.
c)Nếu tên trùng với tên được nhập từ bàn phím thì tăng biến đếm thêm 1.
d)Chỉ cần kiểm tra độ dài của họ tên là biết được học sinh có tên cần tìm hay không.