算法题:有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。

271 阅读1分钟

前言

日常算法练习记录

题目

有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。规定A不和J比赛, M不和D及E比赛。列出所有可能的比赛名单。

分析

枚举遍历算法。三维数组teamR存放组合情况,遍历所有组合,check检查条件成立则输出。teamR数组结构:

kteamR[k][0]teamR[k][1]teamR[k][2]teamR[k][3]teamR[k][4]
0AJBJCJDJEJ
1AKBKCKDKEK
2ALBLCLDLEL
3AMBMCMDMEM
4ANBNCNDNEN

截图

代码(java)

package com.hb;


import java.util.HashMap;
import java.util.Map;

public class AlgorithmTest3 {

    static char[] team1 = {'A','B','C','D','E'};
    static char[] team2 = {'J','K','L','M','N'};
    public static String check(char[] t1,char[] t2,char[] t3,char[] t4,char[] t5)
    {
        String str ="";

        if(t4[1]!='M'&&t5[1]!='M')
        {
            if(t1[1]!='J')
            {
                Map<Character, Integer> m = new HashMap<Character, Integer>();
                m.put(t1[1],1);
                m.put(t2[1],1);
                m.put(t3[1],1);
                m.put(t4[1],1);
                m.put(t5[1],1);
                for(char c:team2)
                    if(!m.containsKey(c))return "";

                str+=(""+t1[0]+t1[1]+" "+t2[0]+t2[1]+" "+t3[0]+t3[1]+" "+t4[0]+t4[1]+" "+t5[0]+t5[1]+" ");
                return str;
            }
        }
        return "";
    }
    public static void main(String args[])
    {

        char teamR[][][] = new char[5][5][2];

            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < 5; j++) {


                    teamR[j][i][0] = team1[i];
                    teamR[j][i][1] = team2[j];


                }

            }

        System.out.println("所有比赛方法数:");
        int sum =0;
        for(int i1=0;i1<5;i1++)
            for(int i2=0;i2<5;i2++)
                for(int i3=0;i3<5;i3++)
                    for(int i4=0;i4<5;i4++)
                        for(int i5=0;i5<5;i5++)
                        {
                            String str="";

                            if((str=check(teamR[i1][0],teamR[i2][1],teamR[i3][2],teamR[i4][3],teamR[i5][4]))!="")
                            {
                                    System.out.println(str);
                                    sum++;
                            }


                        }
        System.out.println("共个"+sum+"比赛方法:");

    }
}


本文使用 文章同步助手 同步