当前位置: 代码迷 >> 综合 >> 第七届蓝桥杯【省赛试题5】抽签
  详细解决方案

第七届蓝桥杯【省赛试题5】抽签

热度:78   发布时间:2023-10-09 16:09:14.0

题目描述:

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行)


#include <stdio.h>
#define N 6
#define M 5
#define BUF 1024void f(int a[], int k, int m, char b[])
{int i,j;if(k==N){ b[M] = 0;if(m==0) printf("%s\n",b);return;}for(i=0; i<=a[k]; i++){for(j=0; j<i; j++) b[M-m+j] = k+'A';______________________;  //填空位置}
}
int main()
{	int  a[N] = {4,2,2,1,1,3};char b[BUF];f(a,0,M,b);return 0;
}
仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。

题目答案:

f(a,k+1,m-j,b);

题目思路:

读题后看了程序,不难看出填空位置是要填写递归语句,而第一个参数和最后一个参数不需要改变,根据递归退出条件和给出的常量可以推断出m表示还需要组多少人。k表示队伍编,因此每次操作一个队伍,所以每次递归的时候k要加一,而m人数需要减少相应的人数。

  相关解决方案