【蓝桥杯】2016年第七届蓝桥杯省赛真题-Java语言B组-5-抽签
2019-03-20 19:40
281 查看
抽签
X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
…
那么最终派往W星的观察团会有多少种国别的不同组合呢?
下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:
DEFFF
CEFFF
CDFFF
CDEFF
CCFFF
CCEFF
CCDFF
CCDEF
BEFFF
BDFFF
BDEFF
BCFFF
BCEFF
BCDFF
BCDEF
…
(以下省略,总共101行)
public class A { public static void f(int[] a, int k, int n, String s) { if(k==a.length){ if(n==0) System.out.println(s); return; } String s2 = s; for(int i=0; i<=a[k]; i++){ _____________________________; //填空位置 s2 += (char)(k+'A'); } } public static void main(String[] args) { int[] a = {4,2,2,1,1,3}; f(a,0,5,""); } }
仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。
分析:
由于本题要求到几个国家派出的人员的组合方案,是一个排列组合问题,而且,代码中的
if(k==a.length){ if(n==0) System.out.println(s); return; }这部分相当于是一个出口,我们不难发现这是用递归方法实现的。
所给出的代码中并没有递归调用的部分,所以补充的代码应该是递归调用的函数。
既然这样,我们就有必要弄清楚递归函数f(int[] a, int k, int n, String s)中每个参数的具体含义。
a: 数组a每个国家可以派出的最多的名额 k :排定第k个元素 n :代表人数,初始为5 s :组合方案字符串
所以很明显,第一个参数还是a,将数组传进来;第二个参数应该是k+1,用于排定下一个元素;第三个参数,经过for循环之后已经尝试着派出i人了,所以剩余的人数应该是n-i;第四个参数,传一个字符串,for循环上面刚定义了s2,for循环中的字符串是s2,我们可以试着将s2传进去试试。
另外可以定义一个变量cnt,用于计数,在递归出口处自增,检验答案是否正确,是否是题目中所说的会输出101行。
答案:f(a, k+1, n-i, s2)
可执行代码:
public class Main { /* 参数的含义: * a 数组a每个国家可以派出的最多的名额 * k 排定第k个元素 * n 代表人数,初始为5 * s 字符串 */ static int cnt;//用于计数,检验答案是否正确 public static void f(int[] a, int k, int n, String s) { if(k==a.length){ if(n==0) { System.out.println(s); cnt++; } return; } String s2 = s; for(int i=0; i<=a[k]; i++){ //试着将k国家派出i人 //_____________________________; //填空位置 f(a, k+1, n-i, s2);//填空位置 s2 += (char)(k+'A'); } } public static void main(String[] args) { int[] a = {4,2,2,1,1,3}; //数组a[] 中即是每个国家可以派出的最多的名额。 f(a,0,5,""); System.out.println(cnt); } }
相关文章推荐
- 【蓝桥杯】2016年第七届蓝桥杯大赛个人赛省赛(软件类)真题-Java语言B组(未完)
- 【蓝桥杯】2016年第七届蓝桥杯省赛真题-Java语言B组-6-方格填数
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 Java语言B组 答案
- 第七届蓝桥杯Java语言B组真题(省赛)
- 第七届蓝桥杯大赛个人赛省赛(软件组)java语言B组---5.抽签
- 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)
- 第七届蓝桥杯JAVA语言B组_抽签
- 算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)
- 2016年蓝桥杯第七届javaB组真题及答案
- 算法笔记_213:第七届蓝桥杯软件类决赛部分真题(Java语言C组)
- 第七届蓝桥杯省赛Java语言C组_小题答案
- 【蓝桥杯】2017年第八届蓝桥杯省赛真题-Java语言B组-1-购物单
- 蓝桥杯-第七届Java语言B组-剪邮票
- 2018 蓝桥杯 省赛 B组 原题 Java语言B组 第10题 第九届蓝桥杯真题 堆的计数
- 蓝桥杯第七届决赛JAVA真题----广场舞
- 第七届蓝桥杯大赛个人赛省赛(软件组)java语言B组---2.生日蜡烛
- 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第二题:生日蜡烛
- 第七届蓝桥杯省赛Java语言C组_骰子游戏
- 蓝桥杯第七届国赛JAVA真题----七星填数