C6-13 · Điểm danh bằng thẻ

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

Máy điểm danh ghi lại mã sinh viên mỗi lần quét thẻ; có người quét nhiều lần. Từ danh sách ~n~ lần quét, hãy in:

  1. các mã không trùng, theo thứ tự quét lần đầu;
  2. số lần quét thừa (tổng số lần quét trừ số sinh viên khác nhau).

Chỉ dùng danh sách và toán tử in (chưa dùng set, dict).

Dữ liệu vào

  • Dòng 1: số nguyên ~n~ — số lần quét.
  • Dòng 2: ~n~ mã sinh viên, cách nhau một dấu cách. Mỗi mã gồm đúng 8 chữ số (có thể bắt đầu bằng chữ số 0).

Kết quả

  • Dòng 1: các mã khác nhau theo thứ tự xuất hiện lần đầu, cách nhau một dấu cách, viết đúng như dữ liệu vào.
  • Dòng 2: số lần quét thừa.

Ràng buộc

  • ~1 \le n \le 1000~.
  • Mã gồm đúng 8 chữ số 0–9.

Ví dụ

Dữ liệu vào:

5
23010004 23010001 23010004 23010007 23010004

Kết quả:

23010004 23010001 23010007
2

Giải thích ví dụ

Có 3 sinh viên khác nhau, xuất hiện lần đầu theo thứ tự 23010004, 23010001, 23010007. Sinh viên 23010004 quét 3 lần, thừa 2 lần; tổng số lần quét thừa ~5 - 3 = 2~.

Lưu ý

  • Mã sinh viên là chuỗi chữ số, không phải số: đổi sang int thì 00123456 thành 123456 (mục 6.9 giữ mã ở dạng chuỗi).
  • "Số lần quét thừa" không phải "số người quét trùng": một người quét 3 lần là thừa 2 lần.
  • Không sắp xếp; không xóa phần tử khỏi danh sách đang duyệt (mục 6.10).
  • Lưu các mã đã gặp trong một danh sách rồi kiểm bằng in. Đừng ghép các mã thành một chuỗi dài: in trên chuỗi là tìm chuỗi con, nên mã 56789012 bị coi là "đã gặp" trong "1234567890123456" dù chưa ai quét mã đó.

Nguồn trong sách: Bài C6-13, mục 6.12, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (***)


Đang tải...