TopStudy

Đáp án và lời giải

Giải SBT Tin học 11 Cánh diều Bài 4. Làm mịn dần từng bước từ thuật toán đến chương trình máy tính có đáp án

Về trang đề

Câu 1

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Kết quả trả về sau cùng là:

Hình minh hoạ

Câu 2

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Đoạn mã giả sẽ trả về số lượng ước dương của n. Với nhận xét tương tự như bài toán kiểm tra tính nguyên tố trong sách giáo khoa, ta chỉ cần duyệt đến sqrt(n) để thống kê tất cả các cặp ước số. Ngoài ra, em phải xét riêng trường hợp số chính phương n = i x i

Câu 3

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Để cắt hết tấm bìa mà không còn thừa mảnh nào thì kích thước cạnh d của hình vuông được cắt ra là ước số của x và y (x : d và y : d).

- Số lượng hình vuông ít nhất thì d phải lớn nhất, tức là: d = ƯCLN (x, y).

- Vậy kết quả của bài toán là: Hình minh hoạ

Đầu vào: Hai số nguyên x, y.

Đầu ra: Số lượng hình vuông thoả mãn.

Thuật toán thô: Tìm giá trị max{d | x : d; y : d).

– Lặp khi min(x,y)>d>1:

Nếu phát hiện x chia hết cho d và y chia hết cho d thì kết quả bài toán là: Hình minh hoạ

Hình minh hoạ

Cải tiến:

Nhận xét: Giá trị của d chính là ước số chung lớn nhất của x và y, có thể dùng hàm có sẵn tìm ước chung lớn nhất để chương trình chạy nhanh hơn.

Hình minh hoạ

Câu 4

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

f(x) = số lượng ước số của x.

Thuật toán thô

– Tạo hàm ((-x), đếm số lượng ước số của x.

Lặp khi 1 <<<n. Nếu f(x) > f(x,) thì gán x = x (x là kết quả bài toán, ban đầu x − 1).

Hình minh hoạ

Cải tiến:

Nhận xét: x chia hết cho i nghĩa là x = i × j, x có hai ước là i và j. Giả sử i<<j thì i < sqrt(x) . Em chỉ cần kiểm tra với i không lớn hơn căn bậc hai của x, giảm được số lần lặp. Chú ý đến trường hợp x là số chính phương thì x=ixinên x chỉ có một ước.

Cải tiến hàm f(x) như sau:

Mã giả

Hình minh hoạ

Câu 5

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Phát biểu 2 và 3 sai. Khi n đủ lớn, 2" sẽ lớn hơn n rất nhiều và tương tự, n’ sẽ lớn hơn n và n.log,n rất nhiều.

Câu 6

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

1) Dùng vòng lặp từ 1 đến n để cộng từng giá trị bình phương vào biến tổng S.

2) Dùng công thức Hình minh hoạ

Câu 7

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

1) Sắp xếp lại danh sách theo thứ tự giảm dần bằng phương pháp sắp xếp nhanh (hàm Sorted ( ) có độ phức tạp O(n.log,n )) rồi in ra phần tử ở vị trí thứ hai.

2) Khởi tạo hai biến max1 = 0 và max2 = 0 tượng trưng cho giá trị lớn thứ 0 nhất và lớn thứ hai trong danh sách A, ta tiến hành duyệt và xét lần lượt từng phần tử v của A:

Nếu max1 < v, ta cập nhật max2 = max1 và max1 = v.

Ngược lại, ta có thể suy ra max1>v(max1 không thể bằng v vì các phần tử trong danh sách A khác nhau từng đôi một). Ta so sánh max2 và v. Nếu max2 < v thì ta cập nhật max2 = v.

Câu 8

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Vì giá trị của i bị giảm đi một nửa sau mỗi bước và vòng lặp sẽ dừng khi i = 0, nên độ phức tạp của chương trình là O(log,N).

Câu 9

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Sau khi kết thúc lượt chạy i = 0, giá trị j sẽ tăng lên bằng n. Ở các lượt chạy sau đó của i thì vòng lặp while bên trong sẽ không được thực thi, nên độ phức tạp của cả chương trình chỉ là O(n).