C語言如何實現從11選5全組合輸出
從11選5全組合輸出(每組有不同的5個數字組成,且每個數碼只能取1~11之間的數)
並且滿足條件每組中1,2,3中最少有1至2個
高手來啊要有源代碼
最佳回答:
#include <stdio.h>
/*
*這個函數的功能是從n個數中選取m個數來排列,並且打印出符合條件的結果(即每組中1,2,3中最少有1至2個,沒有包括號1,2,3都有的)
*數組a是等選取的原始數據,數組b用來保存中間結果,M用來控制打印的參數,count所指向的地址保存符合條件的組合的個數
*/
void combine( int a[], int n, int m, int b[], int M ,int *count)
{
int i,j,t;
for(i=n; i>=m; i--)
{
b[m-1] = i - 1;
if (m > 1)
combine(a,i-1,m-1,b,M,count);
else
{
t=0;
for(j=M-1; j>=0; j--)
if(a[b[j]]==1||a[b[j]]==2||a[b[j]]==3)
t++;
if(t!=1&&t!=2)//判斷包括1,2,3中的1個或者2個的組合
continue;
for(j=M-1; j>=0; j--)
printf("%d ",a[b[j]]);//打印出符合條件的組合
printf("\n");
*count=(*count)++;
}
}
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11};
int b[11];
static int count=0;
combine(a,11,5,b,5,&count);//11選5
printf("count=%d\n",count);//打印出符合條件的個數
}