Bài học cùng chủ đề
Báo cáo học liệu
Mua học liệu
Mua học liệu:
-
Số dư ví của bạn: 0 coin - 0 Xu
-
Nếu mua học liệu này bạn sẽ bị trừ: 2 coin\Xu
Để nhận Coin\Xu, bạn có thể:

Phần II. Tự luận (3 điểm) SVIP
Tải đề xuống bằng file Word
Hãy viết một đoạn chương trình có độ phức tạp thời gian là tuyến tính.
Hướng dẫn giải:
Ví dụ về đoạn chương trình:
n = int(input())
sum = 0
for i in range(0, n):
sum = sum + i
print(sum)
Vòng lặp từ 0 đến n → thời gian thực hiện chương trình là T(n) = n + 3. Độ phức tạp của T(n) là O(n) theo quy tắc lấy max.
Trình bày một thuật toán tìm tất cả các ước chẵn của hai số a và b dưới dạng bước liệt kê hoặc giả mã. Sau đó, chuyển thuật toán đã học thành chương trình (NNLT là Python, C++) theo ý tưởng của phương pháp làm mịn dần.
Hướng dẫn giải:
Trình bày thuật toán:
Bước 1. Nhập hai số nguyên dương a và b.
Bước 2. Tìm ước chung lớn nhất (UCLN) của a và b.
Bước 3. Duyệt qua các số từ 1 đến UCLN để tìm ra các ước là chẵn.
Bước 4. In danh sách các ước chung chẵn.
[1] Chuyển mô tả thành chương trình:
a = int(input())
b = int(input())
list = []
ucln = UCLN(a, b) → Làm mịn tại bước [2]
for i in range(1, ucln+1):
Kiểm tra i có thỏa mãn thì thêm vào danh sách → Làm mịn tại [3]
Hiển thị danh sách.
[2] Làm mịn cách tính ước chung lớn nhất:
Ý tưởng: UCLN của hai số a và b cũng là UCLN của b và phần dư của a chia cho b.
num1 = a, num2 = b.
Lặp đến khi num2 = 0:
Thực hiện phép chia để tìm ucln. → Làm mịn tại bước [4].
Trả về ước chung lớn nhất của a và b.
[3] Làm mịn thao tác kiểm tra số chẵn:
if ucln % i == 0 and ucln % 2 == 0:
list.append(i)
[4] Làm mịn dần thao tác chia giá trị:
Bước 1: Nếu b bằng 0, thì a là UCLN và thuật toán kết thúc.
Bước 2: Nếu b khác 0, hãy chia a cho b và lấy số dư r.
Bước 3: Gán b cho a và r cho b.
Bước 4: Quay lại Bước 1.
Hoàn thiện chương mô tả thuật toán:
a = int(input())
b = int(input())
list = []
num1 = a, num2 = b.
while num2 != 0:
if b == 0:thì a là ucln và thuật toán kết thúc.
Nếu b khác 0, hãy chia a cho b và lấy số dư r.
Gán b cho a và r cho b.
Quay lại.
for i in range(1, ucln+1):
if ucln % i == 0 and ucln % 2 == 0:
list.append(i)
Hiển thị danh sách.