Bắt lỗi chương trình kiểm tra mã báo danh phòng thi
Thang điểm 10 · 6 test case chấm tự động · 3 tiêu chí chấm
Một bạn học sinh viết chương trình kiểm tra xem danh sách mã báo danh (đọc từ máy quét) của một phòng thi có hợp lệ hay không — nghĩa là dãy đó phải trùng khít với dãy 1, 2, ..., n sau khi sắp xếp (không thiếu, không trùng mã nào). Bạn ấy dựa theo đúng ý tưởng làm mịn dần đã học (sắp xếp dãy rồi so sánh với 1..n), nhưng chương trình dưới đây lại cho kết quả sai với một số bộ dữ liệu:
def sapxep(A):
for i in range(len(A)):
j = i
while j > 0 and A[j] < A[j-1]:
A[j], A[j-1] = A[j-1], A[j]
j = j - 1
def kt_maso(A):
sapxep(A)
kq = True
for i in range(len(A)):
if A[i] != i:
kq = False
break
return kq
n = int(input())
A = list(map(int, input().split()))
if kt_maso(A):
print("HỢP LỆ")
else:
print("KHÔNG HỢP LỆ")Em hãy tìm ra chỗ sai trong chương trình trên (gợi ý: so sánh chỉ số i với giá trị cần có tại vị trí đó sau khi sắp xếp), sửa lại cho đúng, rồi viết lại toàn bộ chương trình hoàn chỉnh.
Định dạng input: dòng 1 là số nguyên n; dòng 2 gồm n số nguyên cách nhau bởi dấu cách, là danh sách mã báo danh.
Định dạng output: in ra HỢP LỆ nếu dãy là hoán vị của 1..n, ngược lại in ra KHÔNG HỢP LỆ.
| Input | Output | Giải thích |
|---|---|---|
| 5 3 1 5 2 4 | HỢP LỆ | Sau khi sắp xếp: 1 2 3 4 5, đúng là dãy 1..5 |
| 5 3 1 5 2 2 | KHÔNG HỢP LỆ | Mã 2 lặp lại, thiếu mã 4 |
| 10 2 1 9 10 8 6 5 2 3 1 | KHÔNG HỢP LỆ | Mã 1, 2 lặp lại, thiếu mã 4, 7 |
Giáo viên giao bài này cho lớp, học sinh nộp bài trực tuyến và được chấm tự động.
Giáo viên đăng nhập để giao bàiBài tập khác lớp 11
- Ước lượng thời gian chấm điểm bài thi trắc nghiệm · Lập trình
- Đo đường chéo sân tập thể thao · Lập trình
- Chồng sách trên bàn học · Lập trình
- Thống kê quãng đường chạy bộ của CLB · Lập trình
- Đếm số cách đóng gói đều sản phẩm · Lập trình
- Theo dõi số bước chân của nhóm tập luyện · Lập trình