C++中从n个数中取r个数组合的排列,会做么?

如a[3]={1,2,3}
共有3中,分别为12,13,23,请列出所有组合,谢啦

以前写过类似的,可以参考一下哈
/*
5. 从五种颜色的球中选出3个,输出每种可能的组合数。要求:
1) 定义枚举类型enum Color{Yellow, Blue, Black, Red, Green}
2) 编写函数void Display( Color c), //输出枚举常量c所对应的颜色字符串。如:c==Yellow时,则输出”Yellow”字符串
3) 编写函数void combination(int n,int k),实现从n个球中选出k个球的所有组合数。在此函数中调用函数Display(),输出每种组合所对应的颜色,如:
red yellow blue
red yellow black
……*/

#include <stdio.h>
#include <stdlib.h>

enum Color{Yellow, Blue, Black, Red, Green};
//定义一个辅助数组,用来临时存放每一种组合结果
int temp[100];

void Display(enum Color c)
{
switch(c)
{
case Yellow:
printf("Yellow ");
break;
case Blue:
printf("Blue ");
break;
case Black:
printf("Black ");
break;
case Red:
printf("Red ");
break;
case Green:
printf("Green ");
break;
}
}
//通过递归实现 num记录抽取球的个数,开始的时候num=k
void combination(int n,int k,const int num)
{
int i,j;
for(i=n;i>=k;i--)
{
temp[k-1] = i-1; //记录一个位置
if(k>1)
combination(i-1,k-1,num);
else
{
for(j=num-1;j>=0;j--)
Display(temp[j]);
printf("\n");
}

}
}

int main()
{
combination(5,3,3);
system("pause");
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

C++中从n个数中取r个数组合的排列,会做么?
1) 定义枚举类型enum Color{Yellow, Blue, Black, Red, Green} 2) 编写函数void Display( Color c), \/\/输出枚举常量c所对应的颜色字符串。如:c==Yellow时,则输出”Yellow”字符串 3) 编写函数void combination(int n,int k),实现从n个球中选出k个球的所有组合数。在此函数中调用函数Disp...

...运算中从n个不同的数中取r个数的所有选择的个数。其个数值为: ,其...
Cn|r = n! \/ ( r! * (n-r)! )比如如果n = 3, r = 2 那么C3|2 = 3!\/(2!*1!) = 3种。如n = 4,r = 3 C4|3 = 4!(3!*1!) = 4种。include<iostream>using namespace std;\/\/ different numbersint iteratorn(int n){ int temp = 1; for(int i = 1;i<...

C程序设计,帮忙解决下
能检查输入数据的合法性,要求n>=1并且n>=r;2、分别用递归和非递归两种方式完成程序设计;3、多文件结构实现 将上面用非递归方式写成的程序改成用多文件结构表示。要求将main()函数放在一个文件中,将另外两个函数定义放在另一个C++源文件中,将两个函数原型申明放在一个C++头文件中。建立一个项目...

C\/C++语言 从33个数中选6个排列组合
组合:从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合,例如OR = {1,2,3,4}, n = 4, r = 3则无重组合为:{1,2,3}; {1,2,4}; {1,3,4}; {2,3,4}.include <stdio.h> include <stdlib.h> include <iostream.h> in...

求用递归法求一个集合的子集的C++代码!!
参考下面的 找出从自然数1、2、……、n中任取r个数的所有组合。例如n=5,r=3 的所有组合为:(1)5、4、3 (2)5、4、2 (3)5、4、1 (4)5、3、2 (5)5、3、1 (6)5、2、1 (7)4、3、2 (8)4、3、1 (9)4、2、1 (10)3、2、1 分析所...

急:C++ 程序设计 组合问题:找出从自然数1、2……n中任取个数的所有组 ...
int r,n,a[64];void f(int k){ int i;if(k>r){ for(i=1; i<=r; i++)printf("%d ",a[i]);putchar('\\n');return;} for(i=1; i

c++博弈问题
肯定必输啊,他每次都可以取到整数倍 余留的数后者始终可以取到的个数,两人之和始终是m+1,所以 只有当s>=1且s<m的时候先手就转换成了后手,必赢

用C++函数描述个算法,并求出时间复杂度
int array[5][5];void ReMax(){ int i,j;\/\/\/冒泡法,时间复杂度为5*5 for(i=0;i<5;i++)for(j=0;j<5;j++)if(array[max][may]<array[i][j+1]){max=i;may=j+1;} } void main(){ int i,j;\/\/*a=(int*)malloc(5*sizeof(int));cout<<"请输入一个数组array[5][5...

如何用C++解决数学中的R
0 0 c 0 0 0 0 d 0 0 0 0 结果就是{},以此类推R^或者其他复杂关系 如果像这道比较简单的题,使用简单算法直接映射就可以得出结果,从a映射到b再映射到d,其他的都没有映射关系,断掉了,所以结果就是{} ...

c++n个整数交换后排序
int i ,j , min ,max, tmp;for (i=1 ;i <= n\/2;i++) { \/\/ 做不超过n\/2趟选择排序 min = i; max = i ; \/\/分别记录最大和最小关键字记录位置 for (j= i+1; j<= n-i; j++) { if (r[j] > r[max]) { max = j ; continue ;} if (r[j]< r[min]) { m...

相似回答
大家正在搜