首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将学生分成小组,与不同的学生一起工作

将学生分成小组,与不同的学生一起工作
EN

Stack Overflow用户
提问于 2022-08-16 08:13:30
回答 1查看 174关注 0票数 0

我必须制作一个程序(而不是GUI),它可以将大约25名学生分成几个小组,只有3-4个成员。每次我分开小组,学生必须与不同的学生,他们最不合作。

例如,如果我有像s1,s2,s3,s4这样的学生.假设在第一节课中我们有s1,s2,s3作为一个组,在第二节,我们有s2,s3,s4作为一个组。当涉及到第三节课时,s2不能与s3一起分组,因为他们在前两节课中有那个学生。

这个项目背后的理念是让学生尽可能多地与不同的学生合作。如果我们有一个索引/字典或其他东西,让每个学生知道他们与其他学生一起工作的次数。然后分组标准应该是将他们与2-3的学生分组,他们满足的次数最少。

我不知道没有算法这是否可能。

我想知道你的建议和想法。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-16 09:39:07

你问题的一个特例是所谓的社交广场:我们有N组的N学生,我们希望每个学生都能和其他学生一起工作一次。在你的例子中,5个小组,每个5名学生,由于每个学生必须会见其他24个,并满足他们每次4,我们将有24/4=6,即N+1会话。

有一些已知的算法可以解决这个问题,但不幸的是,只有当N是素数时,它们才能工作。当N不是素数时,解决方案仍然存在,但是afaik您需要强制执行它。然而,由于您允许一些重复,您可能会使用标准algo的变化,以获得您需要的东西。

一种算法如下:

  • 将学生放在NxN矩阵
  • 中进行第一次会话,每一行是一个组
  • ,用于接下来的会话,从每一行中抽取一个学生。第一次垂直移动,然后每行移动一列(循环):所以在第二次会议上,第一组是Row1Col1Row2Col1,.,Row5Col1;第三组是Row1Col1Row2Col2,.,Row5Col5;注意第四组:Row1Col1Row2Col3Row3Col5Row4Col2Row5Col4;等等H 224f 225

下面是一个示例实现:

代码语言:javascript
复制
def social_square(no_students):
    roster = [[f'S{row}{col}' for col in range(no_students)] for row in range(no_students)]
    sessions = []
    #1st
    sessions.append([[roster[row][col] for col in range(no_students)] for row in range(no_students)])
    #following
    for delta in range(no_students):
        session = []
        for step in range(no_students):
            group = []
            col = step
            for row in range(no_students):
                group.append(roster[row][col])
                col = (col + delta) % no_students
            session.append(group)
        sessions.append(session)

    for session in sessions:
        for group in session:
            print(group)
        print()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73370794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档