K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

Sau khi kết thúc khóa học với 100% các bạn sinh viên hoàn thành. Như một lời chia tay năm học đã qua cũng như chào mừng mùa hè rộn rã sắp về, nhà trường tổ chức một buổi cắm trại tại một nơi thật đẹp cho các lớp. Chương trình văn nghệ đêm cắm trại đang trở nên nóng hổi với 150 lượt sinh viên đăng ký. Vì thời lượng đêm diễn có hạn, nên nhà trường đã đưa ra phương án tổ chức một cuộc bốc thăm may mắn kèm theo các điều kiện sàng lọc người tham gia biểu diễn. Phương án này được thực hiện như sau:

- Với 150 sinh viên đăng ký tham gia, Ban tổ chức sẽ phân thành 6 nhóm (A, B, C, D, E, F) với 25 người mỗi nhóm. Có 6 bộ thẻ bài, mỗi bộ thẻ bài gồm 100 lá được đánh dấu từ 1 đến 100.

- Mỗi nhóm (A, B, C, D, E, F) sẽ được phát 1 bộ thẻ bài, và 25 thành viên trong mỗi nhóm nhỏ này sẽ lần lượt lấy và cầm bất kì thẻ bài nào trong bộ thẻ được phát. Lá bài này sẽ được coi đó như là số báo danh của mỗi sinh viên.

- Sau khi phần bốc thăm số báo danh đã xong, các điều kiện sàng lọc tiếp theo sẽ được thực hiện lần lượt như bên dưới:

Sàng lọc 1:

Các bạn sinh viên trong mỗi nhóm (A, B, C, D, E, F) sẽ xếp thành 1 hàng ngẫu nhiên (6 nhóm 6 hàng) với số báo danh được bốc thăm tương ứng.

Với nhóm gộp (A,B,C), xét 3 bạn một lượt theo thứ tự từ đầu hàng đến cuối hàng, sẽ loại trừ các bạn có số báo danh nhỏ nhất (có thể loại 1, 2 hoặc cả 3 nếu 3 sinh viên cùng một số trong lượt xét).

Tương tự với nhóm gộp (D, E, F)

Sàng lọc 2:

Với mỗi nhóm riêng lẻ (A, B, C, D, E, F), nhân tất cả các số báo danh của những thành viên trong nhóm, rồi chia cho (số báo danh lớn nhất - số báo danh nhỏ nhất), nếu phép chia CÓ DƯ, thì sẽ loại các bạn có số báo danh số báo danh lớn nhất và nhỏ nhất, ngược lại thì không loại ai cả.

Sàng lọc 3:

Trong mỗi nhóm gộp (A,B,C) hoặc (D,E,F), nếu có báo danh nào tồn tại 3 lần, thì sẽ loại những bạn sinh viên có số báo danh đó

Cuối cùng:

Trải qua 3 giai đoạn của sàng lọc 1, 2 và 3, các bạn còn lại sẽ được tham gia biểu diễn văn nghệ. Và ban tổ chức muốn biết có tổng cộng bao nhiêu số báo danh khác nhau trong tất cả các nhóm (A + B + C + D + E + F) sau khi sàng lọc

 

Ví dụ chi tiết:

150 sinh viên được phân chia các 6 nhóm và xếp thành 6 dãy hàng với số báo danh bốc thăm tương ứng như bên dưới:

A: 55  59  73  65  56  52  71  70  72  57  64  74  66  61  53  50  60  62  51  69  63  68  58  67  54

B: 60  51  69  53  74  73  61  66  70  55  72  71  54  56  65  58  63  68  64  59  50  52  67  62  57

C: 51  55  70  50  53  52  67  64  65  61  60  57  62  69  63  74  56  54  71  58  68  73  59  72  66

 

D: 70  74  63  58  55  54  61  68  52  56  59  66  65  62  53  60  51  72  64  50  57  73  71  67  69

E: 51  72  50  70  63  60  68  71  61  67  55  69  66  59  52  74  54  53  64  56  62  57  73  65  58

F: 67  71  51  62  56  55  64  57  70  52  66  74  69  50  59  65  58  73  72  53  63  54  68  61  60

 

Sàng lọc 1:

Tìm số báo danh nhỏ nhất của mỗi nhóm gộp (A,B,C) và (D,E,F) với 3 sinh viên một lượt từ hàng đầu đến hàng cuối

A: 55  59  73  65  56  52  71  70  72  57  64  74  66  61  53  50  60  62  51  69  63  68  58  67  54

B: 60  51  69  53  74  73  61  66  70  55  72  71  54  56  65  58  63  68  64  59  50  52  67  62  57

C: 51  55  70  50  53  52  67  64  65  61  60  57  62  69  63  74  56  54  71  58  68  73  59  72  66

 

D: 70  74  63  58  55  54  61  68  52  56  59  66  65  62  53  60  51  72  64  50  57  73  71  67  69

E: 51  72  50  70  63  60  68  71  61  67  55  69  66  59  52  74  54  53  64  56  62  57  73  65  58

F: 67  71  51  62  56  55  64  57  70  52  66  74  69  50  59  65  58  73  72  53  63  54  68  61  60

 

Số báo danh nhỏ nhất trong A, B, C theo từng lượt thứ tự

  51  51  69  50  52  61  64  65  55  60  57  54  56  53  50  56  54  51  58  50  52  58  62  54

Số báo danh nhỏ nhất trong D, E, F theo từng lượt thứ tự

  51  71  50  58  55  54  61  57  52  52  55  66  65  50  52  60  51  53  64  50  57  54  68  61  58

 

Với quy tắc sàng lọc 1, các sinh viên bị loại trừ (RM) của các nhóm sẽ như sau:

A: 55  59  73  65  56  RM  71  70  72  57  64  74  66  61  RM  RM  60  62  RM  69  63  68  RM  67  RM

B: 60  RM  RM  53  74  73  RM  66  70  RM  72  71  RM  RM  65  58  63  68  64  59  RM  RM  67  RM  57

C: RM  55  70  RM  RM  RM  67  RM  RM  61  RM  RM  62  69  63  74  RM  RM  71  RM  68  73  59  72  66

 

D: 70  74  63  RM  RM  RM  RM  68  RM  56  59  RM  RM  62  53  RM  RM  72  RM  RM  RM  73  71  67  69

E: RM 72  RM  70  63  60  68  71  61  67  RM  69  66  59  RM  74  54  RM  RM  56  62  57  73  65  RM

F: 67  RM  51  62  56  55  64  RM  70  RM  66  74  69  RM  59  65  58  73  72  53  63  RM  RM  RM  60

 

Sàng lọc 2:

Với nhóm A: Số báo danh nhỏ nhất nhóm A là 55lớn nhất của nhóm A là 74, kết quả nhân của tất cả số báo danh có trong nhóm A là 24706114253832042444183504814080000, và số dư của phép chia là: 0

Vì số dư của phép chia là 0, nên giữ nguyên các sinh viên của nhóm A

Tương tự cho nhóm B

Với nhóm C: Số báo danh nhỏ nhất nhóm C là 55lớn nhất của nhóm C là 74, kết quả nhân của tất cả số báo danh có trong nhóm C là 31009658378006367135014400, và số dư của phép chia là: 7

Vì là chia có dư, nên sẽ loại trừ các bạn sinh viên có số báo danh là 55 và 74 trong nhóm C

Tương tự cho các nhóm còn lại

 

Sau phép sàng lọc 2, tình trạng sinh viên các nhóm là:

A: 55  59  73  65  56  RM  71  70  72  57  64  74  66  61  RM  RM  60  62  RM  69  63  68  RM  67  RM

B: 60  RM  RM  53  74  73  RM  66  70  RM  72  71  RM  RM  65  58  63  68  64  59  RM  RM  67  RM  57

C: RM  RM  70  RM  RM  RM  67  RM  RM  61  RM  RM  62  69  63  RM  RM  RM  71  RM  68  73  59  72  66

 

D: 70  74  63  RM  RM  RM  RM  68  RM  56  59  RM  RM  62  53  RM  RM  72  RM  RM  RM  73  71  67  69

E: RM  72  RM  70  63  60  68  71  61  67  RM  69  66  59  RM  74  54  RM  RM  56  62  57  73  65  RM

F: 67  RM  51  62  56  55  64  RM  70  RM  66  74  69  RM  59  65  58  73  72  53  63  RM  RM  RM  60

 

Sàng lọc 3:

Nhóm gộp (A + B + C) sẽ bao gồm các bạn có số báo danh sau đây:

55, 59, 73, 65, 56, 71, 70, 72, 57, 64, 74, 66, 61, 60, 62, 69, 63, 68, 67, 60, 53, 74, 73, 66, 70, 72, 71, 65, 58, 63, 68, 64, 59, 67, 57, 70, 67, 61, 62, 69, 63, 71, 68, 73, 59, 72, 66

Nhóm gộp (D + E + F) sẽ bao gồm các bạn có số báo danh sau đây:

70, 74, 63, 68, 56, 59, 62, 53, 72, 73, 71, 67, 69, 72, 70, 63, 60, 68, 71, 61, 67, 69, 66, 59, 74, 54, 56, 62, 57, 73, 65, 67, 51, 62, 56, 55, 64, 70, 66, 74, 69, 59, 65, 58, 73, 72, 53, 63, 60

 

Ta thấy rằng trong nhóm gộp (A + B + C) có những số báo danh xuất hiện 3 lần

59, 73, 71, 70, 72, 66, 63, 68, 67

Ta thấy rằng trong nhóm gộp (D + E + F) có những số báo danh xuất hiện 3 lần

70, 74, 63, 56, 59, 62, 72, 73, 67, 69

 

Vậy là sau khi nhóm gộp loại trừ những bạn sinh viên có số báo danh xuất hiện 3 lần, thì các bạn sinh viên có số báo danh còn lại:

Nhóm gộp (A + B + C):

55, 65, 56, 57, 64, 74, 61, 60, 62, 69, 60, 53, 74, 65, 58, 64, 57, 61, 62, 69

Nhóm gộp (D + E + F)

68, 53, 71, 60, 68, 71, 61, 66, 54, 57, 65, 51, 55, 64, 66, 65, 58, 53, 60

Kết quả, chúng ta có thể đếm được có 17 số báo danh khác nhau trong tất cả các nhóm A + B + C + D + E + F

 

Bạn cần thực hiện các công việc sau:

Tiến hành lập trình để nhập 6 chuỗi ký tự( nhóm A, nhóm B, nhóm C, nhóm D, nhóm E, nhóm F), sau đó viết chương trình để trả về giá trị kết quả

 

Ví dụ lời gọi chương trình:

ChallengeClass().FindTalent("55,59,73,65,56,52,71,70,72,57,64,74,66,61,53,50,60,62,51,69,63,68,58,67,54","60,51,69,53,74,73,61,66,70,55,72,71,54,56,65,58,63,68,64,59,50,52,67,62,57","51,55,70,50,53,52,67,64,65,61,60,57,62,69,63,74,56,54,71,58,68,73,59,72,66","70,74,63,58,55,54,61,68,52,56,59,66,65,62,53,60,51,72,64,50,57,73,71,67,69","51,72,50,70,63,60,68,71,61,67,55,69,66,59,52,74,54,53,64,56,62,57,73,65,58","67,71,51,62,56,55,64,57,70,52,66,74,69,50,59,65,58,73,72,53,63,54,68,61,60")

 

Ràng buộc:

  • Mỗi chuỗi số trong tham gia sẽ có 25 sinh viên với giá trị tương ứng là số báo danh
  • Các số báo danh sẽ nằm trong vùng [1..100]

    Mọi người giúp mình với ngôn ngữ được dùng là python
    Hạn chế dùng for và while
2
14 tháng 8

import re

class ChallengeClass:
    def FindTalent(self, groupA, groupB, groupC, groupD, groupE, groupF):
        def filter_group(group):
            group = list(map(int, group.split(',')))
            group = group[1::3] + group[2::3]
            group = [x for i, x in enumerate(group) if (x != max(group) and x != min(group)) or  sum(group) % (max(group) - min(group)) == 0]
            return group

        def remove_triplicate_ids(merged_group):
            return [x for x in set(merged_group) if merged_group.count(x) < 3]

        groupA = filter_group(groupA)
        groupB = filter_group(groupB)
        groupC = filter_group(groupC)
        groupD = filter_group(groupD)
        groupE = filter_group(groupE)
        groupF = filter_group(groupF)

        merged_group1 = groupA + groupB + groupC
        merged_group2 = groupD + groupE + groupF

        final_group1 = remove_triplicate_ids(merged_group1)
        final_group2 = remove_triplicate_ids(merged_group2)

        return len(set(final_group1 + final_group2))

challenge = ChallengeClass()
result = challenge.FindTalent("55,59,73,65,56,52,71,70,72,57,64,74,66,61,53,50,60,62,51,69,63,68,58,67,54", "60,51,69,53,74,73,61,66,70,55,72,71,54,56,65,58,63,68,64,59,50,52,67,62,57", "51,55,70,50,53,52,67,64,65,61,60,57,62,69,63,74,56,54,71,58,68,73,59,72,66", "70,74,63,58,55,54,61,68,52,56,59,66,65,62,53,60,51,72,64,50,57,73,71,67,69", "51,72,50,70,63,60,68,71,61,67,55,69,66,59,52,74,54,53,64,56,62,57,73,65,58", "67,71,51,62,56,55,64,57,70,52,66,74,69,50,59,65,58,73,72,53,63,54,68,61,60")
print(result) 

 

 

import re class ChallengeClass: def FindTalent(self, groupA, groupB, groupC, groupD, groupE, groupF): def filter_group(group): group = list(map(int, group.split(','))) group = group[1::3] + group[2::3] group = [x for i, x in enumerate(group) if (x != max(group) and x != min(group)) or sum(group) % (max(group) - min(group)) == 0] return group def remove_triplicate_ids(merged_group): return [x for x in set(merged_group) if merged_group.count(x) < 3] groupA = filter_group(groupA) groupB = filter_group(groupB) groupC = filter_group(groupC) groupD = filter_group(groupD) groupE = filter_group(groupE) groupF = filter_group(groupF) merged_group1 = groupA + groupB + groupC merged_group2 = groupD + groupE + groupF final_group1 = remove_triplicate_ids(merged_group1) final_group2 = remove_triplicate_ids(merged_group2) return len(set(final_group1 + final_group2))

challenge = ChallengeClass()
result = challenge.FindTalent("55,59,73,65,56,52,71,70,72,57,64,74,66,61,53,50,60,62,51,69,63,68,58,67,54", "60,51,69,53,74,73,61,66,70,55,72,71,54,56,65,58,63,68,64,59,50,52,67,62,57", "51,55,70,50,53,52,67,64,65,61,60,57,62,69,63,74,56,54,71,58,68,73,59,72,66", "70,74,63,58,55,54,61,68,52,56,59,66,65,62,53,60,51,72,64,50,57,73,71,67,69", "51,72,50,70,63,60,68,71,61,67,55,69,66,59,52,74,54,53,64,56,62,57,73,65,58", "67,71,51,62,56,55,64,57,70,52,66,74,69,50,59,65,58,73,72,53,63,54,68,61,60")
print(result)

Giải thích:
  1. Hàm filter_group(group): Hàm này nhận vào một chuỗi các số báo danh của một nhóm, thực hiện Sàng lọc 1 và 2, và trả về danh sách các số báo danh còn lại sau khi sàng lọc.

    • Chuyển đổi chuỗi thành danh sách số nguyên: group = list(map(int, group.split(',')))

    • Sàng lọc 1: Lấy các phần tử có chỉ số 1, 4, 7,... và 2, 5, 8,... để loại bỏ phần tử nhỏ nhất trong mỗi nhóm 3: group = group[1::3] + group[2::3]

    • Sàng lọc 2: Sử dụng list comprehension để giữ lại các phần tử thỏa mãn điều kiện: group = [x for i, x in enumerate(group) if (x != max(group) and x != min(group)) or sum(group) % (max(group) - min(group)) == 0]

  2. Hàm remove_triplicate_ids(merged_group): Hàm này nhận vào danh sách đã gộp của 3 nhóm, thực hiện Sàng lọc 3, và trả về danh sách các số báo danh duy nhất xuất hiện ít hơn 3 lần.

    • Sử dụng set để loại bỏ trùng lặp: [x for x in set(merged_group) if merged_group.count(x) < 3]

  3. Phần chính của chương trình (FindTalent):

    • Áp dụng filter_group cho từng nhóm A, B, C, D, E, F.

    • Gộp 3 nhóm đầu thành merged_group1, 3 nhóm sau thành merged_group2.

    • Áp dụng remove_triplicate_ids cho merged_group1merged_group2.

    • Trả về tổng số lượng phần tử duy nhất (không trùng lặp) trong cả hai nhóm sau khi sàng lọc bằng len(set(final_group1 + final_group2)).

Lưu ý: Chương trình này sử dụng list comprehension và các hàm như map, sum, max, min để tránh sử dụng vòng lặp forwhile một cách trực tiếp.

 

 

 

14 tháng 8

import re

class ChallengeClass:
    def FindTalent(self, groupA, groupB, groupC, groupD, groupE, groupF):
        def filter_group(group):
            group = list(map(int, group.split(',')))
            group = group[1::3] + group[2::3]
            group = [x for i, x in enumerate(group) if (x != max(group) and x != min(group)) or  sum(group) % (max(group) - min(group)) == 0]
            return group

        def remove_triplicate_ids(merged_group):
            return [x for x in set(merged_group) if merged_group.count(x) < 3]

        groupA = filter_group(groupA)
        groupB = filter_group(groupB)
        groupC = filter_group(groupC)
        groupD = filter_group(groupD)
        groupE = filter_group(groupE)
        groupF = filter_group(groupF)

        merged_group1 = groupA + groupB + groupC
        merged_group2 = groupD + groupE + groupF

        final_group1 = remove_triplicate_ids(merged_group1)
        final_group2 = remove_triplicate_ids(merged_group2)

        return len(set(final_group1 + final_group2))

challenge = ChallengeClass()
result = challenge.FindTalent("55,59,73,65,56,52,71,70,72,57,64,74,66,61,53,50,60,62,51,69,63,68,58,67,54", "60,51,69,53,74,73,61,66,70,55,72,71,54,56,65,58,63,68,64,59,50,52,67,62,57", "51,55,70,50,53,52,67,64,65,61,60,57,62,69,63,74,56,54,71,58,68,73,59,72,66", "70,74,63,58,55,54,61,68,52,56,59,66,65,62,53,60,51,72,64,50,57,73,71,67,69", "51,72,50,70,63,60,68,71,61,67,55,69,66,59,52,74,54,53,64,56,62,57,73,65,58", "67,71,51,62,56,55,64,57,70,52,66,74,69,50,59,65,58,73,72,53,63,54,68,61,60")
print(result)