Câu hỏi:

11/07/2024 2,168

Mở rộng bài tập trên như sau:

- Việc sắp xếp thứ tự phải ưu tiên tính theo tên trước, rồi đến họ, rồi đến đệm.

- Sắp xếp theo thứ tự của bảng chữ cái tiếng Việt.

Lưu ý: Bảng chữ cái tiếng Việt (bao gồm cả dấu thanh) được sắp xếp theo thứ tự sau:

AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMNOÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴaàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmnoòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ.

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

Hướng dẫn:

Để làm được bài tập này chúng ta cần thiết kế cơ chế so sánh từ điển tiếng Việt giữa hai xâu bất kì. Cách làm là đưa ra một từ điển Alphabet bao gồm các chữ cái tiếng Việt theo đúng thứ tự. Việc so sánh theo thứ tự từ điển được thực hiện bởi hàm so_sanh(s1, s2). Hàm này có ý nghĩa như sau:

Giá trị hàm trả lại: Bằng 0, nếu s1 = s2.

Bằng 1, nếu s1 > s2.

Bằng -1, nếu s1 < s2.

Sau khi đã định nghĩa được thứ tự từ điển mới thì các bước tiếp theo là khá dễ dàng.

Chương trình có thể viết như sau:

Alphabet = " AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMN\ OÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴ\ aàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmn\ oòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ."

MAX = 30

def so_sanh(s1, s2):

m = min(len (s1), len(s2))

kq = 0

k = 0

while k < m and kq == 0:

ch1, ch2 = s1[k], s2[k]

if Alphabet.index(ch1) < Alphabet.index(ch2):

kq = -1

return -1

if Alphabet.index(ch1) > Alphabet.index(ch2):

kq = 1

return 1

k = k + 1

if len(s1) < len(s2):

return -1

elif len(s1) > len(s2):

return 1

else:

return 0

def tach_ten(hoten):

sline = hoten.split()

return sline[len(sline)-1]

def space(k):

return " "*k

def transform(A):

B = []

for s in A:

ten = tach_ten(s)

tenmoi = ten + space(MAX - len(ten)) + s

B.append(tenmoi)

return B

def sap_xep(A):

hs = A.copy( )

B = transform(A)

for i in range(1, len(B)):

j = i

while j > 0 and so_sanh (B[j],B[j-1]) == -1:

B[j],B[j-1] = B[j-1],B[j]

hs[j],hs[j-1] = hs[j-1],hs[j]

j = j-1

return hs

# Chương trình chính

A = []

n = int(input("Nhập số học sinh của lớp: "))

for k in range(n):

hoten = input("Nhập tên học sinh thứ "+str(k+1)+": ")

A.append(hoten)

hs = sap_xep(A)

print("Danh sách học sinh trong lớp: ")

for s in hs:

print(s) 

Bình luận


Bình luận

CÂU HỎI HOT CÙNG CHỦ ĐỀ

Câu 1:

Viết chương trình nhập số n, sau đó nhập danh sách học sinh trong lớp với đầy đủ họ, đệm, tên. Sau đó cần sắp xếp học sinh trong lớp theo thứ tự từ điển (tức là thứ tự của bảng chữ cái trong bảng mã Unicode). Đưa kết quả ra màn hình.

Xem đáp án » 13/07/2024 14,062

Câu 2:

Em hãy viết chương trình nhập một họ tên đầy đủ từ bàn phím, ví dụ "Nguyễn Thị Mai Hương", sau đó tách riêng phần tên, họ, đệm và thông báo ra màn hình.

Xem đáp án » 13/07/2024 9,888

Câu 3:

Cho trước dãy số. Yêu cầu cần tìm ra một dãy con liên tục có độ dài lớn nhất bao gồm các số bằng nhau. Ví dụ với dãy: 1, 1, 2, 3, 0, 0, 0, 7, 10, 10, 5, 1, 1, 6 thì cần đưa ra thông báo:

Dãy con bằng nhau có độ dài lớn nhất là 0, 0, 0 bắt đầu từ chỉ số 4. Dãy số gốc gồm các số nguyên được nhập trên một dòng từ bàn phím, chương trình cần đưa ra thông báo như trên.

Xem đáp án » 13/07/2024 3,403

Câu 4:

Bài toán đếm số lần lặp của một mẫu xâu trong xâu gốc như sau: Cho trước xâu gốc S và một xâu mẫu str. Yêu cầu cần tìm số lần lặp của xâu mẫu str trong xâu gốc S. Có hai kiểu tìm số lần lặp:

1 – Tìm số lần lặp xâu con có thể chồng lấn lên nhau.

2 – Tìm số lần lặp không chồng lấn của xâu con.

Ví dụ nếu xâu gốc là "12121341212100", xâu con mẫu là "121" thì:

- Số lần lặp có chồng lấn của str trong S là 4 lần.

- Số lần lặp không chồng lấn của str trong S là 2 lần.

Bài toán như sau: Cho trước các xâu kí tự S và str, hãy tìm số lần lặp không chồng lấn của xâu str trong xâu S.

Xem đáp án » 13/07/2024 1,203

Câu 5:

Nếu n là hợp số thì dễ thấy n phải có ước số nguyên tố nhỏ hơn hoặc bằng n. Viết chương trình tối ưu hoá hơn nhiệm vụ 1, bài 31, theo cách sau: để tìm ước số nguyên tố nhỏ nhất chỉ cần tìm trong các số 2, 3,... Nếu trong dãy trên không tìm thấy ước của n thì kết luận ngay n là số nguyên tố.

Xem đáp án » 13/07/2024 1,036

Câu 6:

Trong các phần mềm bảng tính điện tử, dữ liệu ngày tháng được coi là số ngày tính từ ngày 1-1-1990. Nhập thời gian theo khuôn dạng ngày - tháng 4 năm (ví dụ 8-10-2021), tính giá trị của ngày này theo cách lưu trữ của phần mềm bảng tính điện tử.

Xem đáp án » 13/07/2024 711
Vietjack official store
Đăng ký gói thi VIP

VIP +1 - Luyện thi tất cả các đề có trên Website trong 1 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +3 - Luyện thi tất cả các đề có trên Website trong 3 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +6 - Luyện thi tất cả các đề có trên Website trong 6 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +12 - Luyện thi tất cả các đề có trên Website trong 12 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay