爱吃麻辣香锅的阿涛 2021-10-18 23:32 采纳率: 71.4%
浏览 55

班上有37个人,每个人都要跟班上其他36个人一起吃饭,每次分3个人一组

求所有的分组可能 其中不可以重复
请用代码做出来

  • 写回答

2条回答 默认 最新

  • STRANG-P 2021-10-19 10:14
    关注
    
    @Data
    public class Group{
    
    private int personA;
    
    private int personB;
    
    private int personC;
    
    }
    
    public class GroupTest {
    
        public static void main(String[] args) {
           // 集合模拟班级中的 37个人
           List<Integer> personList = new ArrayList<>();
           for (int i = 1;i<38;i++ ) {
              personList.add(i); 
           }       
           List<Group> groupList = new ArrayList<>();
           for (int i = 0; i<personList.size();i++) { 
                      for (int j = 0; j<personList.size();j++) {
                            for (int k = 0; k<personList.size();k++) {
                                 Group group = new Group();
                                 group.setPersonA(personList.get(i));
                                 group.setPersonB(personList.get(j));
                                 group.setPersonC(personList.get(k));
                                 groupList.add(group);
                            }
                       }
           }       
           // 过滤掉分组中有重复的人的组合
           List<Group> groupListOne = groupList.stream().filter(t -> t.getPersonA()!=t.getPersonB() && t.getPersonA() != t.getPersonC() && t.getPersonB() != t.getPersonC()).collect(Collectors.toList());
        // 组合中排序
       List<Group> groupListTwo =  groupListOne.stream().map(t -> {
                 int max=(t.getPersonA()>t.getPersonB()? t.getPersonA():t.getPersonB())>t.getPersonC()? (t.getPersonA()>t.getPersonB()? t.getPersonA():t.getPersonB()):t.getPersonC();
                int min=(t.getPersonA()<t.getPersonB()? t.getPersonA():t.getPersonB())<t.getPersonC()? (t.getPersonA()<t.getPersonB()? t.getPersonA():t.getPersonB()):t.getPersonC();
                Group group = new Group();
                group.setPersonA(min);
                group.setPersonB(t.getPersonA()+t.getPersonB()+t.getPersonC()-min-max);
                group.setPersonC(max);
                return group ;
        }).collect(Collectors.toList());
            // 最终的结果
            Set<Group> result = new HashSet<>(); 
            result.addAll(groupListTwo); 
            System.out.println("一共有" + result.size() + "种分组,如下:");
            for (Group group: result ) { 
                System.out.println(group.getPersonA()+"-"+group.getPersonB()+"-"+group.getPersonC()); 
            } 
        }
    }
    
    
    评论
    1人已打赏

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys