一个排列组合的算法问题
求教:1234四个数字取3个数要求不重复,结果存储在一个数组中a[4][3]的数组中结果:123;124;134;234;数组a[][]的存储格式如下|123------...
求教:
1 2 3 4 四个数字 取3个数 要求不重复,结果存储在一个数组中a[4][3]的数组中
结果:
123;124;134;234;
数组a[][]的存储格式如下
| 1 2 3
------------------
1 | 1 2 3
2 | 1 2 4
3 | 1 3 4
4 | 2 3 4
希望能给出代码来 不胜感激 展开
1 2 3 4 四个数字 取3个数 要求不重复,结果存储在一个数组中a[4][3]的数组中
结果:
123;124;134;234;
数组a[][]的存储格式如下
| 1 2 3
------------------
1 | 1 2 3
2 | 1 2 4
3 | 1 3 4
4 | 2 3 4
希望能给出代码来 不胜感激 展开
7个回答
展开全部
貌似是求组合的,现写了个比较简单的,可得出任意n选m的组合:
#include <stdio.h>
#include <stdlib.h>
void Print(int* beg, int* end)
{
while(beg != end)
printf("%d ", *beg++);
putchar('\n');
}
void C(int n, int m)
{
int i;
int *p, *x, *tb;
if(n == m)
{
for(i = 0; i < m; ++i)
printf("%d ", i + 1);
return;
}else if(m > n)
return;
p = (int*)malloc(sizeof(int) * m);
for(i = 1; i <= m; ++i)
p[i - 1] = i;
tb = p + m - 1;
do{
Print(p, p + m);
if(*tb < n)
++*tb;
else
{
while(*tb - *(tb - 1) <= 1)--tb;
--tb;
++*tb;
for(x = tb + 1; x != p + m; ++x)
*x = *(x - 1) + 1;
tb = p + m - 1;
}
}while(*p != n - m + 1);
Print(p, p + m);
free(p);
}
int main()
{
C(4, 3);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void Print(int* beg, int* end)
{
while(beg != end)
printf("%d ", *beg++);
putchar('\n');
}
void C(int n, int m)
{
int i;
int *p, *x, *tb;
if(n == m)
{
for(i = 0; i < m; ++i)
printf("%d ", i + 1);
return;
}else if(m > n)
return;
p = (int*)malloc(sizeof(int) * m);
for(i = 1; i <= m; ++i)
p[i - 1] = i;
tb = p + m - 1;
do{
Print(p, p + m);
if(*tb < n)
++*tb;
else
{
while(*tb - *(tb - 1) <= 1)--tb;
--tb;
++*tb;
for(x = tb + 1; x != p + m; ++x)
*x = *(x - 1) + 1;
tb = p + m - 1;
}
}while(*p != n - m + 1);
Print(p, p + m);
free(p);
}
int main()
{
C(4, 3);
return 0;
}
展开全部
#include <stdio.h>
void init(int *b)
{
int i;
for (i=0; i <= 3; i++) b[i]=i+1;
}
int main()
{ int b[4],a[4][3],i,p,sw;
for (i=0; i<=3; i++) {
sw=0;
init(b);
b[i]=0;
for (p=0; p<=2; p++) {
if (b[p]==0&&sw==0) sw=1;
a[i][p]=b[p+sw];
}
}
for (i=0; i<=3; i++) {
for (p=0; p<=2; p++) {
printf("%d ",a[i][p]);
}
putchar('\n');
}
system("pause");
return 0;
}
void init(int *b)
{
int i;
for (i=0; i <= 3; i++) b[i]=i+1;
}
int main()
{ int b[4],a[4][3],i,p,sw;
for (i=0; i<=3; i++) {
sw=0;
init(b);
b[i]=0;
for (p=0; p<=2; p++) {
if (b[p]==0&&sw==0) sw=1;
a[i][p]=b[p+sw];
}
}
for (i=0; i<=3; i++) {
for (p=0; p<=2; p++) {
printf("%d ",a[i][p]);
}
putchar('\n');
}
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream.h>
void main()
{
int data[4]={1,2,3,4};
int a[4][3]={0};
int temp[3] = {0};
int i,j,k;
int count = 0;
for(i =0;i < 4;i ++)
{
for(j = i+1;j < 4;j ++)
{
for(k = j+1;k < 4;k ++)
{
a[count][0] = data[i];
a[count][1] = data[j];
a[count][2] = data[k];
count ++;
}
}
}
for(i = 0;i < 4;i ++)
{
for(j = 0;j < 3;j ++)
cout<<a[i][j];
cout<<endl;
}
}
void main()
{
int data[4]={1,2,3,4};
int a[4][3]={0};
int temp[3] = {0};
int i,j,k;
int count = 0;
for(i =0;i < 4;i ++)
{
for(j = i+1;j < 4;j ++)
{
for(k = j+1;k < 4;k ++)
{
a[count][0] = data[i];
a[count][1] = data[j];
a[count][2] = data[k];
count ++;
}
}
}
for(i = 0;i < 4;i ++)
{
for(j = 0;j < 3;j ++)
cout<<a[i][j];
cout<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void combin(int s[], int d[][3])
{
int t, i, j, k;
t = 0;
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 4; j++)
{
for (k = j + 1; k < 4; k++)
{
d[t][0] = s[i];
d[t][1] = s[j];
d[t][2] = s[k];
t++;
}
}
}
}
int main(void)
{
int s[] = {1, 2, 3, 4}, d[4][3];
combin(s, d);
}
{
int t, i, j, k;
t = 0;
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 4; j++)
{
for (k = j + 1; k < 4; k++)
{
d[t][0] = s[i];
d[t][1] = s[j];
d[t][2] = s[k];
t++;
}
}
}
}
int main(void)
{
int s[] = {1, 2, 3, 4}, d[4][3];
combin(s, d);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
来一个简单明了的:
#include<stdio.h>
void fun(int a[][3])
{
int i,j,k,m=0;
for(i=1;i<=4;i++)
for(j=i+1;j<=4;j++)
for(k=j+1;k<=4;k++)
{ a[m][0]=i;a[m][1]=j;a[m][2]=k;
m++;
}
}
void main()
{
int i,j,a[4][3];
fun(a);
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
}
#include<stdio.h>
void fun(int a[][3])
{
int i,j,k,m=0;
for(i=1;i<=4;i++)
for(j=i+1;j<=4;j++)
for(k=j+1;k<=4;k++)
{ a[m][0]=i;a[m][1]=j;a[m][2]=k;
m++;
}
}
void main()
{
int i,j,a[4][3];
fun(a);
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a[4][3]可能存不下啊.
1 | 1 2 3
2 | 1 2 4
3 | 1 3 4
4 | 2 3 4
5 | 2 1 3
6 | 2 1 4
7 |......
是吗?
1 | 1 2 3
2 | 1 2 4
3 | 1 3 4
4 | 2 3 4
5 | 2 1 3
6 | 2 1 4
7 |......
是吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询