蓝桥杯——分组比赛(2017JavaB组第3题)
分组比赛(17JavaB3)
9名运动员参加比赛,需要分3组进行预赛。
有哪些分组的方案呢?
标记运动员为 A,B,C,... I
下面的程序列出了所有的分组方法:
ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
..... (以下省略,总共560行)。
分析:代码填空题,改成编码题
先排三个,再排三个,最后排三个
(1)先分有A的一组:
| ABC | ||||||
|---|---|---|---|---|---|---|
| ABD | ACD | |||||
| ABE | ACE | ADE | ||||
| ABF | ACF | ADF | AEF | |||
| ABG | ACG | ADG | AEG | AFG | ||
| ABH | ACH | ADH | AEH | AFH | AGH | |
| ABI | ACI | ADI | AEI | AFI | AGI | AHI |
第一位:全A
第二位:B—H,即第一位后——H
第三位:第二位后——I
public class 分组比赛1 {
public static void main(String[] args) {
int LEN = 9;
for (int _n2 = 1; _n2 < LEN; _n2++) {
for (int _n3 = _n2 + 1; _n3 < LEN; _n3++) {
String s = "A" + (char) (_n2 + 'A') + (char) (_n3 + 'A');
System.out.println(s);
}
}
}
}
(2)再分第二组
(3)最后剩下的三个为一组
详细设计
定义数组_flag[9](已分组=1,未分组=0)
A必排第一个,无条件_flag[0]=1
排第二个(n2):for(1 ~ length-1)
n2已分组(_flag[n2] = 1)
排第三个(n3):for(n2+1 ~ length-1)
n3已分组(_flag[n3] = 1)
前三个分组完成!
String s1 = 拼出前三内容
call再分三个(s1,_flag数组)
n3分组完成(_flag[n3] = 0)
n2分组完成(_flag[n2] = 0)
void 再分三个(s1,_flag数组){
排第四个(i):for(1 ~ length-1)
_flag[i]已经分组?continue:_flag=1;
排第五个(j):for(i+1 ~ length-1)
_flag[j]已经分组?continue:_flag=1;
排第六个(k):for(j+1 ~ length-1)
_flag[k]已经分组?continue:_flag=1;
中间三个分组完成!
分最后三个:
for(1 ~ length-1){
_flag=0的全部是
}
本次分组完成!
拼出s2,s3
System.out.println(s1+s2+s3);
k分组完成 (_flag = 0)
j分组完成 (_flag = 0)
i分组完成 (_flag = 0)
}
参考代码
package bb;
public class 分组比赛16JB3 {
public static String m分最后三个(int[] a) {
String s = "";
// 从0开始扫描(从1开始也行,反正A必是已被分组)
// 没分组的全放进来
for (int i = 0; i < a.length; i++) {
if (a[i] == 0) {
s += (char) (i + 'A');
}
}
return s;
}
private static int num = 1;
public static void m再分三个(String s, int[] a) {
// 排4,5,6三人
// 第4人从0开始扫描(从1开始也行,反正A必是已被分组)
for (int i = 1; i < a.length; i++) {
if (a[i] == 1) {// 此人未分组则分之,分了组则跳过
continue;
} else {
a[i] = 1;
}
// 第5人从i+1开始扫描
for (int j = i + 1; j < a.length; j++) {
if (a[j] == 1) {
continue;
} else {
a[j] = 1;
}
// 第6人从j+1开始扫描
for (int k = j + 1; k < a.length; k++) {
if (a[k] == 1) {
continue;
} else {
a[k] = 1;
}
// 填空
System.out.print(num++);
System.out.print(" ");
// 天空位置在此:
System.out.println(s + " " + (char) ('A' + i) + (char) ('A' + j)
+ (char) ('A' + k) + " " + m分最后三个(a)); // 填空位置
a[k] = 0;// 这是一一列举,这次输出了,不要占用,让出分组位置
}
a[j] = 0;
}
a[i] = 0;
}
}
public static void main(String[] args) {
// 数组_flag,原题是数组a,表意性不强,用于标识每个运动员是否被分组
// 已分组=1
// 未分组=0
int[] _flag = new int[9];
_flag[0] = 1;// 分第一个运动员A(下标为0)
for (int _n2 = 1; _n2 < _flag.length; _n2++) {
_flag[_n2] = 1;// 分这个
for (int _n3 = _n2 + 1; _n3 < _flag.length; _n3++) {
_flag[_n3] = 1;// 分这个
String s = "A" + (char) (_n2 + 'A') + (char) (_n3 + 'A');
m再分三个(s, _flag);
_flag[_n3] = 0;
}
_flag[_n2] = 0;
}
}
}
蓝桥杯——分组比赛(2017JavaB组第3题)的更多相关文章
- 蓝桥杯——复数幂 (2018JavaAB组第3题)
18年Java蓝桥杯A组第3题和B组是一样的. 第三题往往比较难. 复数幂 (18JavaAB3) (A.B两卷第三题一样) 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. ...
- 蓝桥杯——快速排序(2018JavaB组第5题9分)
快速排序(18JavaB5,9') 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. impo ...
- 第七届蓝桥杯省赛javaB组 第七题剪邮票
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- 2015年蓝桥杯省赛B组第3题--三羊献瑞
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞 ------------------- 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的 ...
- 蓝桥杯——螺旋折线(2018JavaB组第7题19分)
螺旋折线(18JB-7-19') 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. ...
- 蓝桥杯——字母阵列(2018JavaC组第3题)
字母阵列(18JavaC3) 标题:字母阵列 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI ...
- 第七届蓝桥杯省赛JavaB组——第十题压缩变换
题目: 压缩变换小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战.最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...
- 52-2018 蓝桥杯省赛 B 组模拟赛(一)java
最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...
- 算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)
目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学 ...
随机推荐
- 从APT攻击中学习
0x01. 什么是APT? 可以看出APT攻击,叫高级可持续威胁攻击,也称为定向威胁攻击:什么是定向,也就是指定目标行业而发起进攻 这边又提到供应链和社会工程学,那是什么? 社会工程学,也就是社工,通 ...
- python打印水仙花数的个人总结
面试过程中,提到python,面试最多的就是让你现场写代码实现水仙花.冒泡.九九乘法表,这些面试方法旨在校验面试者的python基础和思维逻辑. 先从水仙花说起,水仙花是指一个n位正整数(n>= ...
- 任务管理器中arcsom.exe和arcsoc.exe的个数问题
转载链接:http://blog.newnaw.com/?p=78 安装了ArcGIS Server的机器,当打开任务管理器的时候,会看到里面有arcsom.exe和arcsoc.exe进程,但它们的 ...
- 『JVM』我不想知道我是怎么来滴,我就想知道我是怎么没滴
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- jenkins配置邮件报错:501 mail from address must be same as authorization user
jenkins配置文件的时候,遇到如下报错: 我的配置是这样的: 最后发现是jenkins url下面的系统管理员邮件地址没写,填写与用户名一致就可以了.
- MFC的大致讲解
现在使用MFC框架的人越来越少了,现在大家都在用QT框架来写,对应初学者就我感觉来说,MFC真的是一个很好的框架,现在在工业方面使用的几乎都是MFC,所以以后就业想要往工业方面找C++工作,可以好好看 ...
- IO复用之poll
主要用一个例程来讲解poll,包含客户端和服务器端. poll函数没有FD_SETSIZE的限制 int poll(struct pollfd * fdarray, unsigned long nfd ...
- jm8.6编解码器概述
自己在学习h264的路上,欢迎讨论交流. 前段时间研究JM出品的h264编码器,代码实在看不下去,因此换了个角度来研究诸多算法--逆向方式(解码),本系列文章记录一些遇到的东西和思考. 1. JM介绍 ...
- linux帮助手册(help/man/info)
linux本身有数据库(数据库名whatis)--man实际是从whatis数据库里查找信息. makewhatis 刚装系统,若man不能用,用makewhatis命令.整理whatis数据库. 当 ...
- linux的别名(alias/unalias)
linux中有别名时先找的别名后找命令文件 临时创建是直接用alias. [root@localhost ~]# alias ls=pwd [root@localhost ~]# ls /root 其 ...