早教吧 育儿知识 作业答案 考试题库 百科 知识分享

重谢.求大神写一个C++程序并附带注释,然后说明一下所用的算法.程序要求如下•3.给出n个整数,找出其中任意r个数的所有可能的组合.例如n=5,(23,36,17,6,29),r=3,则所有组合为:233617233662336

题目详情
重谢.求大神写一个C++程序并附带注释,然后说明一下所用的算法.程序要求如下
•3.
给出n个整数,找出其中任意r个数的所有可能的组合.例如n=5,(23,36,17,6,29),r=3,则所有组合为:
2336 17 23 36 6 23 3629
2317 6 23 17 29 23 6 29
3617 6 36 17 29 36 6 29
17 6 29
▼优质解答
答案和解析
#include

/*
算法概要:
a1, a2...a2
取第一个数a1作为组合的第一个数,然后从剩下的数a2...an中取r-1个数进行剩下的组合,完成一次循环
然后取第二个数a2作为组合的第一个数,然后从剩下的数a3...an中取r-2个数进行剩下的组合,完成一次循环
依此类推,得到全部的组合.
*/
/*
 进行排列输出的主函数
 a: n个数据的数组
 n: 数据个数
 r: 组合的r
 result: 缓存本次组合的数组
 aindex: 当前组合的a下标
 resultindex: 当前组合的结果下标
*/ 
void C(int a[], int n, int r, int result[], int aindex, int resultindex)
{
// 如果已经组合够r个数据,输出
if (resultindex >= r)
{
for (int x=0; x{
cout<}
cout<}
else
{
for (int i=aindex; i{
result[resultindex] = a[i]; // 保存当前数据到组合中
C(a, n, r, result, i + 1, resultindex + 1); // 递归组合剩下的数据
}
}
}

// 组合,并进行环境初始化,然后调用组合函数C完成组合输出
void CC(int a[], int n, int r)
{

int* result = new int[r]; // 组合缓存
C(a, n, r, result, 0, 0); // 组合输出
delete[] result;
}

int main()
{
int n, r;
cout<<"n,r:";
cin>>n>>r; // 输入组合的n,r值
int* a = new int[n];
for (int i=0; i{
cout<<"n"<cin>>a[i]; // 输入数据
}
CC(a, n, r); // 组合输出
delete[] a;

return 0;
}
看了重谢.求大神写一个C++程序并...的网友还看了以下:

有人说钟的时针和分针一天内会重合24次这种说法是否正确?从午夜零时算起假设分针走了tmin会与时针  2020-04-26 …

问题关于两对相对性状的杂交试验举例:豌豆杂交的子一代YyRr在自交的时候要写出配子然后子二代就求出  2020-04-26 …

钢管的重量应该怎么计算?按照计算公式1:3.14*(R*R--r*r)*长度*密度的计算公式.即先  2020-06-02 …

二重积分问题,平面薄片质量设有一平面,它占有XOY平面上的闭区域D,在D的每点(x,y)处的面密度  2020-06-05 …

为什么重极限不能用重极限的唯一性,用y=x求就是做题的时候,要求二重极限,既然要求二重极限首先肯定  2020-06-10 …

出和重这两个字的读音念错了吧?出这个字按道理两座山重在一起应该是读重量的重才对啊?还有重这个字,千  2020-06-20 …

简单逻辑题(证明)黑板上写11,13作如下操作(1) 将其中某数重写一遍(2) 将两数相加写出和数  2020-06-27 …

韩非子在《耕战论》中提出“能趋力于地者富,能趋力于敌者强”,因而必然要求“重农”。韩非子“重农”的  2020-07-08 …

什么是重心(什么是等效作用点)既然重心可以不在物体上,那重心怎么受到重力在不规则物体上,凭什么能求  2020-07-30 …

党中央在研究部署第二批先进性教育活动时提出“注重求真务实,搞好分类指导”。“搞好分类指导”的哲学依据  2020-12-17 …