用C语言如何编程实现从三个数组中各抽取几个数进行组合的问题?
例:从数组A中抽取3个数,数组B中抽取2个数,数组C中抽取1个数,组成6个数的组合,求源程序。A={3,4,6,7,8,9,11,13,14,15,16,18,19,20,24,27,28,29,33}
B={1,2,10,12,17,21,22,25,26,30,31,32}
C={5,23}
程序代码:#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void fun(int,int,int);
int D[6]; //定义数组D,抽取的数全放在这里
void main()
{
int i;
int A[19]={3,4,6,7,8,9,11,13,14,15,16,18,19,20,24,27,28,29,33};
int B[12]={1,2,10,12,17,21,22,25,26,30,31,32};
int C[2]={5,23};
fun(A,19,3);
fun(B,12,2);
fun(C,2,1);
for(i=0;i<6;i++)
printf("%d\t",D[i]);
}
void fun(int a[],int m,int n){ //抽取函数,m 表示数组长度,n 表示要抽取几个数
static int i=0; //定义成静态变量,知道含义吧?不知道看书去
int j=0,k,t;
srand(time(NULL));
for(i;i<6;i++){
t=rand()%(m-j+1);
D[i]=a[t];
for(k=t;k<m-j-1;k++) //抽取一个数后,把数组中的这个数删除,防止下次再次被抽中
a[k]=a[k+1];
if(++j==n){ //抽满所需的个数就中断
i++;
break;
}
}
}
