美文网首页
2016年Java方向C组第五题

2016年Java方向C组第五题

作者: D丝学编程 | 来源:发表于2021-03-08 13:17 被阅读0次

分小组

9名运动员参加比赛,需要分3组进行预赛。
有哪些分组的方案呢?

我们标记运动员为 A,B,C,... I
下面的程序列出了所有的分组方法。

该程序的正常输出为:

ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
ABC DFG EHI
ABC DFH EGI
ABC DFI EGH
ABC DGH EFI
ABC DGI EFH
ABC DHI EFG
ABC EFG DHI
ABC EFH DGI
ABC EFI DGH
ABC EGH DFI
ABC EGI DFH
ABC EHI DFG
ABC FGH DEI
ABC FGI DEH
ABC FHI DEG
ABC GHI DEF
ABD CEF GHI
ABD CEG FHI
ABD CEH FGI
ABD CEI FGH
ABD CFG EHI
ABD CFH EGI
ABD CFI EGH
ABD CGH EFI
ABD CGI EFH
ABD CHI EFG
ABD EFG CHI
..... (以下省略,总共560行)。
public class A
{
    public static String remain(int[] a)
    {
        String s = "";
        for(int i=0; i<a.length; i++){
            if(a[i] == 0) s += (char)(i+'A');
        }   
        return s;
    }
    
    public static void f(String s, int[] a)
    {
        for(int i=0; i<a.length; i++){
            if(a[i]==1) continue;
            a[i] = 1;
            for(int j=i+1; j<a.length; j++){
                if(a[j]==1) continue;
                a[j]=1;
                for(int k=j+1; k<a.length; k++){
                    if(a[k]==1) continue;
                    a[k]=1;
                    System.out.println(__________________________________);  //填空位置
                    a[k]=0;
                }
                a[j]=0;
            }
            a[i] = 0;
        }
    }
    
    public static void main(String[] args)
    {
        int[] a = new int[9];       
        a[0] = 1;
        
        for(int b=1; b<a.length; b++){
            a[b] = 1;
            for(int c=b+1; c<a.length; c++){
                a[c] = 1;
                String s = "A" + (char)(b+'A') + (char)(c+'A');
                f(s,a);
                a[c] = 0;
            }
            a[b] = 0;
        }
    }
}

仔细阅读代码,填写划线部分缺少的内容。

注意:不要填写任何已有内容或说明性文字。

解析:

s+" "+(char)(i+'A')+(char)(j+'A')+(char)(k+'A')+" "+remain(a)

备注:main函数中s,实际已经求出以A开头的所有组合。

在f函数中,接收main中的s以及标记哪些已经使用过的数组a,在通过三层嵌套循环在通过数组a判断哪些字符没有使用过,进行剩下6个字符中的三个的排列。

在f函数运行过程中调用remain,实际上是处理最后剩下的三个字符将其排列。

此题可以先打印s,判断s为前三列,然后打印remain(a),判断remain(a)为最后三列,在f中有三层嵌套循环,并且每层循环都做了==1,continue的处理,可以猜测每层循环在判断使用过的字符跳过循环,即没有使用过得字符需要添加到打印结果中,其中i,j,k可以代表字符的向右移动步长,即中间三列为(char)(i+'A')+(char)(j+'A')+(char)(k+'A')。

相关文章

  • 2015年Java方向C组第五题

    标题:格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两...

  • 2016年Java方向C组第五题

    分小组 9名运动员参加比赛,需要分3组进行预赛。有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I下面...

  • 2018年Java方向C组第五题

    标题:书号验证 2004年起,国际ISBN中心出版了《13位国际标准书号指南》。原有10位书号前加978作为商品分...

  • 2017年Java方向C组第五题

    标题: 杨辉三角 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要。 两边的元素都是1, 中间的元素是左...

  • 9、正则表达式

    注:第0组(d(a(b))(c))第1组 d(a(b))(c)第2组 a(b)第3组 b 一、正则表达式的概述和简...

  • 浅谈学好java需要熟练掌握的知识

    个人是从C++方向转到JAVA方向的新手,个人认为学号JAVA需要从以下方面入手,学好下面那些知识,JAVA基本可...

  • 2014年Java方向C组第八题

    标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上...

  • 2014年Java方向C组第九题

    标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 ...

  • 2015年Java方向C组第二题

    第二题 标题:立方尾不变 有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,.... 请...

  • 2015年Java方向C组第三题

    第三题 标题:无穷分数 无穷的分数,有时会趋向于固定的数字。 请计算【图1.jpg】所示的无穷分数,要求四舍五入,...

网友评论

      本文标题:2016年Java方向C组第五题

      本文链接:https://www.haomeiwen.com/subject/qazlxltx.html