第七届蓝桥杯JAVA语言B组_抽签
2017-04-09 10:43
567 查看
题目:抽签
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++){ _____________________________; //填空位置 //答案为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}; f(a,0,5,""); } }
答案:f(a,k+1,n-i,s2);
解析:本体需要考虑递归,一般情况下档f()方法不为void,且刚开始是if判断,可以考虑下是否是递归
首先是判断递归的内容递归f(a,0,5,"")a表示数组,""表示要输出的字符,然后判断0和5,在
if(k==a.length){
if(n==0) System.out.println(s);
return;
}
中看出,当k==a.length表示当k的值检验到最后一个公司的时候结束,所以k表示检验到公司的个数,第k公司为为数组的a[k-1],所以a.length表示没公司了
然后n==0,输出。n表示没分配的人数则在空处输入f(a,k+1;n-i;s2);
其中a表示数组,k+1表示要到下一个公司,n-i表示这个公司用了i个名额,还有n-i个名额,
s2为存入的数组,当然,这个是s还是s2可以挨个判断(仅有这两个数组)
解释一下for循环,循环当前国家(a[k])的情况,并用s2存下来,然后k+1递归进入下一个国家(索引值),n-i 表示还需要派遣的人数,s2表示存储的当前情况。
当有时判断不准某个参数,还不知道是的时候可以进行一个简单的循环即走一遍,把a数组改为{6,6}
然后走一遍
f(a,0,5,"")
判断不等
s2=s
i=0 ..
i=1 ..
i=2 ..
i=3 ..
i=4 ..
i=5 ..
i=6 ..
考虑一个最最简单的i=5;
f(a,x,x,x);然后把自己推断出来的可能答案填里面进行走,判断哪个逻辑错误,再单独修改,可以快速判断
但如果判断对了每个值得情况则不需要
相关文章推荐
- 第七届蓝桥杯大赛个人赛省赛(软件组)java语言B组---5.抽签
- 第七届蓝桥杯JAVA语言B组_凑算式
- 算法笔记_213:第七届蓝桥杯软件类决赛部分真题(Java语言C组)
- 第七届蓝桥杯省赛Java语言C组_冰雹数
- 第七届蓝桥杯省赛Java语言C组_搭积木
- 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答
- 第七届蓝桥杯省赛Java语言C组_小题答案
- 第七届蓝桥杯大赛个人赛省赛(软件组)java语言B组---2.生日蜡烛
- 第七届蓝桥杯省赛Java语言C组_四平方和
- 第七届蓝桥杯JAVA语言B组_煤球数目
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第三题:凑算式
- 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)
- 蓝桥杯-第七届Java语言B组-方格填数
- 第七届蓝桥杯Java语言B组真题(省赛)
- 算法笔记_122:蓝桥杯第七届省赛(Java语言A组)试题解答
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第二题:生日蜡烛
- 第七届蓝桥杯省赛Java语言C组_骰子游戏
- 第七届蓝桥杯大赛个人赛省赛(软件组)java语言B组---8.四平方和
- 算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)
- 蓝桥杯-第七届省赛javaA组-抽签