# 数的组合【数组】

1 2 3 4 5

3

543542541532531521432431421321

``````5 6 1 2 9 5
4``````

``5921，5926，5925，5916，5915，5965，5216，5215，5265，5165，9216，9215，9265，9165，2165``

``````#include <stdio.h>
#include <stdlib.h>
int a[100],b[100];
int t=0;
void combine(int n,int k,int K)
{
int i,j;
for(i=n;i>=k;i--){
b[k-1]=i-1;
if(k>1)
combine(i-1,k-1,K);
else
{
if(t!=0)
{
printf("，");
}
t++;
for(j=K-1;j>=0;j--)
{
printf("%d",a[b[j]]);
}
}
}

}
int main()
{

int sum=1,i,m=0,n=0,k,K;
while(1)
{
scanf("%d",&a[n++]);
if(getchar()=='\n')
break;
}

scanf("%d",&k);
K=k;
combine(n,k,K);
return 0;
}

``````

``````#include <stdio.h>
void combine(int a[], int n, int m, int b[], int M);
int t=0;
int main(void)
{
int i=0,k;
int a[100], b[100];
char ch;
for(i;; i++)
{
scanf("%d%c",&a[i],&ch);
if(ch=='\n') break;
}
scanf("%d",&k);

combine(a, i+1, k, b, k);
return 0;
}
void combine(int a[], int n, int m, int b[], int M)
{
int i, j;
for (i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
combine(a, i - 1, m - 1, b, M);
else
{
if(t!=0)
{
printf("，");
}
t++;
for (j = M - 1; j >= 0; j--)
printf("%d", a[b[j]]);

}
}
}
``````