本文主要是介绍蓝桥杯历年真题省赛java b组 2016年 第七届 抽签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
抽签
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行)
二、代码
package Lan2016;public class E抽签 {/*抽签X星球要派出一个5人组成的观察团前往W星。其中:A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。数组a[] 中既是每个国家可以派出的最多的名额。程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF
....(以下省略,总共101行)*//** 不断尝试每个国家派出的人数范围* */public static void f(int[] a, int k, int n, String s){if(k==a.length){//如果已经把每个国家的派出的人数范围已经遍历完if(n==0) System.out.println(s);//且人数达到5个return;//返回}String s2 = s;//定义新串保存之前的国别组合for(int i=0; i<=a[k]; i++){//遍历各国可派出的人数f(a,k+1,n-i,s2);//递归调用,判断下一个国家,这是人数剩n-i个s2 += (char)(k+'A');//将字母加到s2上}}public static void main(String[] args){int[] a = {4,2,2,1,1,3};//数组,// A国最多可以派出4人,B国最多可以派出2人,C国最多可以派出2人,// D国最多可以派出1人,E国最多可以派出1人,F国最多可以派出3人。f(a,0,5,"");//}}
三、反思
要考虑到用递归,k表示遍历的国别数,当一个国家遍历完之后,则要判断下一个国家,此时需要遍历的人数n也会-1
这篇关于蓝桥杯历年真题省赛java b组 2016年 第七届 抽签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!