Môn Tin họcQuản lý học tập Tin học

Soát lỗi đếm buổi tập trùng giờ trên FitTrack

Lớp 11Lập trìnhpythonGiải quyết vấn đề với máy tínhVận dụng cao

Thang điểm 10 · 5 test case chấm tự động · 4 tiêu chí chấm

Ứng dụng thể thao FitTrack lưu lại giờ bắt đầu (số nguyên từ 0 đến 23) của n buổi tập trong ngày. Hai lập trình viên đưa ra hai đoạn mã để đếm số cặp buổi tập bắt đầu cùng giờ (mỗi cặp chỉ được tính đúng 1 lần):

Đoạn mã A (nghi có lỗi):

  • count = 0
  • for i in range(n):
  •     for j in range(n):
  •         if i != j and a[i] == a[j]:
  •             count = count + 1

Đoạn mã B:

  • count = 0
  • for i in range(n):
  •     for j in range(i + 1, n):
  •         if a[i] == a[j]:
  •             count = count + 1

Đoạn mã A đếm mỗi cặp trùng giờ hai lần (một lần khi i<j, một lần khi i>j) nên kết quả bị sai gấp đôi so với thực tế, dù cả hai đoạn đều có độ phức tạp thời gian dạng O(n^2).

Hãy viết lại chương trình đúng (theo cách làm của đoạn mã B): đọc số nguyên n và n số nguyên là giờ bắt đầu của các buổi tập, in ra số cặp buổi tập trùng giờ (mỗi cặp tính đúng 1 lần), sau đó in ra bậc độ phức tạp thời gian của chương trình dưới dạng O(n^2).

Định dạng vào: dòng 1 chứa n; dòng 2 chứa n số nguyên là giờ bắt đầu (0-23), cách nhau bởi khoảng trắng.

Định dạng ra: dòng 1 là số cặp trùng giờ; dòng 2 là chuỗi O(n^2).

InputOutputGiải thích
5
8 9 8 10 9
2
O(n^2)
Giờ 8 xuất hiện 2 lần (1 cặp), giờ 9 xuất hiện 2 lần (1 cặp) → tổng 2 cặp
3
1 2 3
0
O(n^2)
Không có giờ nào trùng nhau
#O-lớn#vòng lặp lồng nhau#lỗi đếm trùng#phân tích code#category:tu_duy_phan_bien#difficulty:analyzing

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ài