第七届蓝桥杯JAVA语言B组_抽签

第七届蓝桥杯竞赛中,X星球需派出由A、B、C三国成员组成的5人观察团,各有不同人数限制。本文通过程序展示了所有可能的组合,共101种,用JAVA语言实现。
摘要由CSDN通过智能技术生成

题目:抽签

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);然后把自己推断出来的可能答案填里面进行走,判断哪个逻辑错误,再单独修改,可以快速判断
但如果判断对了每个值得情况则不需要



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值