当前位置:   article > 正文

蓝桥杯历年真题省赛java b组 2016年 第七届 抽签

蓝桥杯历年真题省赛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行)

二、代码


 

  1. package Lan2016;
  2. public class E抽签 {
  3. /*抽签
  4. X星球要派出一个5人组成的观察团前往W星。
  5. 其中:
  6. A国最多可以派出4人。
  7. B国最多可以派出2人。
  8. C国最多可以派出2人。
  9. ....
  10. 那么最终派往W星的观察团会有多少种国别的不同组合呢?
  11. 下面的程序解决了这个问题。
  12. 数组a[] 中既是每个国家可以派出的最多的名额。
  13. 程序执行结果为:
  14. DEFFF
  15. CEFFF
  16. CDFFF
  17. CDEFF
  18. CCFFF
  19. CCEFF
  20. CCDFF
  21. CCDEF
  22. BEFFF
  23. BDFFF
  24. BDEFF
  25. BCFFF
  26. BCEFF
  27. BCDFF
  28. BCDEF
  29. ....
  30. (以下省略,总共101行)*/
  31. /*
  32. * 不断尝试每个国家派出的人数范围
  33. * */
  34. public static void f(int[] a, int k, int n, String s)
  35. {
  36. if(k==a.length){//如果已经把每个国家的派出的人数范围已经遍历完
  37. if(n==0) System.out.println(s);//且人数达到5个
  38. return;//返回
  39. }
  40. String s2 = s;//定义新串保存之前的国别组合
  41. for(int i=0; i<=a[k]; i++){//遍历各国可派出的人数
  42. f(a,k+1,n-i,s2);//递归调用,判断下一个国家,这是人数剩n-i个
  43. s2 += (char)(k+'A');//将字母加到s2上
  44. }
  45. }
  46. public static void main(String[] args)
  47. {
  48. int[] a = {4,2,2,1,1,3};//数组,
  49. // A国最多可以派出4人,B国最多可以派出2人,C国最多可以派出2人,
  50. // D国最多可以派出1人,E国最多可以派出1人,F国最多可以派出3人。
  51. f(a,0,5,"");//
  52. }
  53. }

三、反思

        要考虑到用递归,k表示遍历的国别数,当一个国家遍历完之后,则要判断下一个国家,此时需要遍历的人数n也会-1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/246172
推荐阅读
相关标签
  

闽ICP备14008679号