编程输出从1,2,3,4,5,6中任选3个数组成的所有组合

如题所述

第1个回答  2011-09-19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 计算 n!
int fact(int n)
{
long f;
if (n ==0 || n == 1)
{
return 1;
}
else
{
return fact(n-1)*n;
}
}
// 计算组合数 C(m,n)
int cmn(int m,int n)
{
if(m>n)
{
return 0;
}
else
{
return fact(n)/fact(m)/fact(n-m);
}
}

void permutationAndCombination
(
// 基本参数
int data[],int dataSize,int selectNum,
// 递归用到的参数
int start,int flag[],int count,
// 选择排列的结果
int ***result ,int *resultSize
)
{
int i;
int totalSelectMethods = cmn(selectNum,dataSize);

if(flag == NULL || (*result) == NULL)
{
flag = (int*)malloc(sizeof(int)*dataSize);
memset(flag,0,sizeof(int)*dataSize);

(*result) = (int**)malloc(sizeof(int*)*totalSelectMethods);
for(i=0;i<totalSelectMethods;i++)
{
(*result)[i] = (int*)malloc(sizeof(int)*selectNum);
}
*resultSize = 0;
}

if(selectNum == count)
{
(*resultSize) ++;
if((*resultSize) < totalSelectMethods)
{
for(i=0;i<selectNum;i++)
{
(*result)[*resultSize][i] = (*result)[(*resultSize)-1][i];
}
}
}
else
{
// 注意终止条件: (dataSize - i) >= (selectNum - count)
for(i = start;(dataSize - i) >= (selectNum - count);i++)
{
if(flag[i] == 0)
{
(*result)[*resultSize][count] = data[i];
flag[i] = 1;
permutationAndCombination
(
data,dataSize,selectNum,
i+1,flag,count+1,
result,resultSize
);
flag[i] = 0;
}
}
}
}
int main(int argc, char *argv[])
{
/*
从数组 data(不含重复元素)中取 selectNum 个数字的方案。
只要修改 data 和 selectNum,其他地方不用修改,就能计算任意的排列组合问题。
比如:
int data[]={1,2,3,4,5,6,7,8};
int selectNum = 5;
表示从1-8中取5个数字的方案。

*/
int data[]={1,2,3,4,5,6,7};
int selectNum = 3;

int **result = NULL,resultSize = 0;
int i,j;

permutationAndCombination
(
data,sizeof(data)/sizeof(data[0]),selectNum,
0,NULL,0,
&result,&resultSize
);

for(i=0;i<resultSize;i++)
{
printf("第%3d种方案:",i+1);
for(j=0;j<selectNum;j++)
{
printf("%d ",result[i][j]);
}
printf("\n");
}
return 0;
}
/*
第 1种方案:1 2 3
第 2种方案:1 2 4
第 3种方案:1 2 5
第 4种方案:1 2 6
第 5种方案:1 2 7
第 6种方案:1 3 4
第 7种方案:1 3 5
第 8种方案:1 3 6
第 9种方案:1 3 7
第 10种方案:1 4 5
第 11种方案:1 4 6
第 12种方案:1 4 7
第 13种方案:1 5 6
第 14种方案:1 5 7
第 15种方案:1 6 7
第 16种方案:2 3 4
第 17种方案:2 3 5
第 18种方案:2 3 6
第 19种方案:2 3 7
第 20种方案:2 4 5
第 21种方案:2 4 6
第 22种方案:2 4 7
第 23种方案:2 5 6
第 24种方案:2 5 7
第 25种方案:2 6 7
第 26种方案:3 4 5
第 27种方案:3 4 6
第 28种方案:3 4 7
第 29种方案:3 5 6
第 30种方案:3 5 7
第 31种方案:3 6 7
第 32种方案:4 5 6
第 33种方案:4 5 7
第 34种方案:4 6 7
第 35种方案:5 6 7
请按任意键继续. . .
*/
第2个回答  2011-09-19
3层for循环
int a,b,c;
for(a=1;a<7;a++)
for(b=1;b<7;b++)
for(c=1;c<7;c++)
if(a!=b&&b!=c&&a!=c)
printf("%d %d %d\n",a,b,c);
第3个回答  2011-09-19
#include <iostream>
using namespace std;

int main()
{
int i[3];
for (i[0] = 1; i[0] <= 6; ++i[0])
{
for (i[1] = 1; i[1] <= 6; ++i[1])
{
for (i[2] = 1; i[2] <= 6; ++i[2])
{
cout << i[0] << i[1] << i[2] << endl;
}
}
}
return 0;
}本回答被提问者采纳
第4个回答  2011-09-19
第一个:
#include<stdio.h>
main()
{ int n,i;
char a[10];
scanf("%s",a);
n=strlen(a);
for(i=0;i<=n-2;i++)
printf("%c,",a[i]);
printf("%c",a[i]);
}
改过之后的:
#include<stdio.h>
#include<math.h>
main()
{ int n,i;
long j;
char a[10];
scanf("%s",a);
n=strlen(a);
j=pow(10,(n-1)); /*10的n-1次方*/
for(i=0;i<=n-1;i++) /*输出原数据*/
printf("%c",a[i]);
printf("=");
for(i=0;i<=n-2;i++) /*输出后面的计算过程*/
{printf("%c*%ld+",a[i],j);
j=j/10;}
printf("%c",a[i]);
}

编程输出从1,2,3,4,5,6中任选3个数组成的所有组合
include <stdio.h> include <stdlib.h> include <string.h> \/\/ 计算 n!int fact(int n){ long f;if (n ==0 || n == 1){ return 1;} else { return fact(n-1)*n;} } \/\/ 计算组合数 C(m,n)int cmn(int m,int n){ if(m>n){ return 0;} else { return fact(n)\/...

1,2,3,4,5,6六个数任意选3个组成一个三位数,有那些组合方式?需要...
1 2 6 134 135 136 145 146 156 234 235 236 245 246 256 345 346 356 456 共20种组合方式!每一种能组成3!=6个不同!的三位数,故共有20*6=120个数。事实上,就是P(6,3)=6*5*4=120 个!

从1、2、3、4、5、6中选出三个不同的数,使得它们的和是偶数,共有几种...
两个奇数一个偶数,三个都是偶数。1,3,5是奇数 2,4,6是偶数,选法为:C(3)2*C(3)1+C(3)3 =3*3+1 =10(种)

1,2,3,4,5,6,7,8,9,0这十个数字中,任选三个,可以组成多少组?都是哪些...
排列组合就是 c103=10x9x8÷3÷2=120 如果讨论列举:比如所有含有1的,分为含有2、3...9讨论(注意重复项不要算进去)1-2-(8种) 1-3-(7种) 1-4-(6种)...1-9(1种) (往后不往前,比如1-2 后面可以选择3-0,但是1-3 往后只有4-0可以选择,不用选2,因为1 2 3 和1 ...

1,2,3,4,5,6搭配为每组3个的情况
所以,从1,2,3,4,5,6 这六6个数字中任选3个不同的数字,使3个数之和能被3整除的方案必定是从上面三组中每组各取一数所组成.因为每组各有2个数字,所以取数方案种数为:2*2*2=8种.1、2、3 1、2、6 1、5、3 1、5、6 4、2、3 4、2、6 4、5、3 4、5、6 ...

从0,1,2,3,4,5,6中选出3个不同的数构成三位数,求所有的三位数之和。用...
1,2,3,4,5,6的地位是一样的,0因为不能在首位,另外考虑一下 不含0时,1在百位的方法有A(5,2)种,同样1在十位的方法也有A(5,2)种,1在个位的方法也有A(5,2)种 含0时,1在百位的方法有C(5,1)A(2,2)种,1在十位的方法有C(5,1)种,1在个位的方法也有C(5,1)种 所以,这些...

在1,2,3,4,5,6这6个数中选三个数使它们的和能被3整除,不同的选法有多 ...
6个数模3余1,2,0,1,2,0 只有1+2+0模3余0 排列组合:从1,4中选1个,从2,5中选1个,从3,6中选1个,共2^3=8种 1,2,3 2,3,4 3,4,5 4,5,6 1,2,6 1,3,5 1,5,6 2,4,6

1 2 3 4 5 6,选三个数,列出所有能被3整出的组
123,132,213,231,312,321,234,243,324,342,423,432,345,354,435,453,534,543,456,465,546,564,645,654,135,153,315,351,126,162,216,261,612,621,

从1,2,3,4,5,6,7,8,9中任意选出三个数,使它们的和为偶数,则共有...
【答案】:C 这是一个排列组合题。由题可知,三个数要么都为偶数,要么至少有两个奇数,三个奇数的情况是不存在的,所以计算公式为:P25+P34=5×4+4×3×2=20+24=44。

如何用EXCEL将"1、2、3、4、5、6"这六个数的所有组合排列出来?
And c <> e And c <> f _And d <> e And d <> f _And e <> f Then n = n + 1 Cells(n, 1) = a: Cells(n, 2) = b: Cells(n, 3) = c: _Cells(n, 4) = d: Cells(n, 5) = e: Cells(n, 6) = f End If Next Next Next Next Next Next End Sub ...

相似回答