一个排列组合的算法问题

求教: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

希望能给出代码来 不胜感激
展开
 我来答
飘渺世间天
2007-08-21 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1110万
展开全部
貌似是求组合的,现写了个比较简单的,可得出任意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;
}
WXD110114dccd8
2007-08-21 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.6万
采纳率:43%
帮助的人:7957万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6436d7620
2007-08-21 · TA获得超过593个赞
知道答主
回答量:80
采纳率:0%
帮助的人:111万
展开全部
#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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gzlu
2007-08-21 · TA获得超过1127个赞
知道小有建树答主
回答量:558
采纳率:0%
帮助的人:0
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冼珈蓝歆3r
2007-08-21 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:135万
展开全部
来一个简单明了的:
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可爱的小知道
2007-08-21 · TA获得超过259个赞
知道答主
回答量:346
采纳率:0%
帮助的人:0
展开全部
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 |......

是吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式