C-分数算法问题
有2N个不同的数,如k1,k2,k3.....k2N, 将其分为N对,(k1',k2')....(k2N-1',k2N'),如何实现呢?
如果N=2
1 2 3 4--》(1,2),(3,4)|(1,3),(2,4)|(1,4),(2,3);
如果N=3
(1,2)(34)(56)
(1,2)(35)(46)
(1,2)(36)(45)
(1,3)(24)(56)
(1,3)(25)(46)
(1,3)(26)(45)
(1,4)(23)(56)
(1,4)(25)(36)
(1,4)(26)(35)
(1,5)(23)(46)
(1,5)(24)(36)
(1,5)(26)(34)
(1,6)(23)(45)
(1,6)(24)(35)
(1,6)(25)(34)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
#include <stdio.h>
#include <conio.h>
int num = 0;
int Arrange(int a[255],int n,int n1,int x[255]);
void DisPlay(int a[255],int m,int n);
void PrintfData(int a[255],int n);
void IfPlus(int x[255],int n);
void main(void)
{
int n,i;
int a[255],x[255] = {0};
printf("请输入N的取值:");
scanf("%d",&n);
while(1)
{
if(Arrange(a, n, n, x))
break;
}
printf("共有%d组",num);
getch();
}
int Arrange(int a[255],int n,int n1,int x[255])
{
int m,p = 0;
if (n == 1)
{
for (m = 0; m < 2*n1; m++)
{
a[m] = m + 1;
}
}else
{
p = Arrange(a, n - 1, n1, x);
if(p == 1)
return 1;
if(n == 2 && x[n] == 2*n - 1)
{
return 1;
}
if (n == n1)
{
x[n]++;
IfPlus(x,n);
}
DisPlay(a, 2*n - 1, 2*n - 1 - x[n]%(2*n - 1));
if (n == n1)
{
PrintfData(a,n1);
num++;
}
return 0;
}
}
void IfPlus(int x[255],int n)
{
if(n == 2)
return;
if (x[n] % (2*n - 1) == 0 && x[n] != 0)
{
x[n - 1]++;
IfPlus(x, n - 1);
}
}
void DisPlay(int a[255],int m,int n) //将a数组的倒数第m个数据与第n个调换位置
{
int i;
i = a[m - 1];
a[m - 1] = a[n - 1];
a[n - 1] = i;
}
void PrintfData(int a[255],int n) //打印函数
{
int i;
for (i = 0; i < n; i++)
{
printf("(%d %d)",a[2*i],a[2*i + 1]);
}
printf("n");
}