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

  • 相关阅读:
    超短脉冲的时空特性
    GitHub上标星120k的Java进阶面试教程等!(建议收藏)
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    「教程」秀米怎么添加附件(Word文档、Excel表格等)
    对Axios进行封装
    CF1473C No More Inversions
    反射(一)
    17-js原型链
    with语句和上下文管理器
    【Qt】信号和槽机制
  • 原文地址:https://blog.csdn.net/2301_76876837/article/details/136694077