例如,输入的是0-9,那么组合有:第一种(0,9)(1,8)(2,7)(3,6)(4,5);第二种(0,1)(2,3)(4,5)(6,7)(8,9);第三种(0,2)(1,3)(4,5)(6,7)(8,9)等等,列举出所有的可能
#include <stdio.h>
int b[50][2];
int c[50][2];
int m=0;
int a[100] = {0};
int len = 0;
int sum = 0;
void print()
{
int i;
for(i=0;i<m;i++)
printf("(%d,%d) ",b[i][0],b[i][1]);
printf("\n");
for(i=0;i<m;i++)
printf("(%d,%d) ",c[i][0],c[i][1]);
printf("\n");
}
void fun(int *a,int n)
{
if(n==2)
{
b[m][0] = a[0];
b[m][1] = a[1];
c[m][0] = a[1];
c[m][1] = a[0];
m++;
print();
sum+=2;
m--;
return;
}
else
{
for(int i=1;i<n;i++)
{
b[m][0] = a[0];
b[m][1] = a[i];
c[m][0] = a[i];
c[m][1] = a[0];
m++;
int p = 0;
int *k = new int[n-2];
for(int j=1;j<i;j++)
k[p++] = a[j];
for(int j=i+1;j<n;j++)
k[p++] = a[j];
fun(k,n-2);
delete []k;
m--;
}
}
}
int main()
{
scanf("%d",&len);
for(int i=0;i<len;i++)
scanf("%d",&a[i]);
fun(a,len);
printf("sum=%d\n",sum);
system("pause");
return 0;
}