穷举算法 n个元素的数组中选择其中r个做标记

按照排列组合的方法,不要代码,给个大概思路就行了,如果思路清晰,给追加分。
如果是5中取3,怎样保证c5,3=10,这十种都可以取到,又不重复。。。求穷举递归算法思想

用递归函数,定义一个int型数组que[n+1];0表示不取,1表示取,定义一个函数
void work(int po,int num){ //从数组que 的po 到n里取num个数
if(n-po+1==num){ //剩余n-po+1个数,取num个,相等时全取
for(int i=0;i<num;i++){
que[po+i]=1;
}
//递归终止 que里存的就是最终结果
for(int i=1;i<=n;i++)
cout<<que[i];
cout<<end;
return ;
}
if(n-po>num){
que[po]=1;
work(po+1,num+1); //取当前数
que[po]=0;
work(po+1,num); //不取当前数
}
}
你运行work(5,3),应该就是你要的效果
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-09
再定义一个数组,元素同样是n个,类型是布尔型(整型也可以),与前面的数组一一对应,它的值就是是否做标记,例如TRUE就是做了标记,FALSE就是没做标记。

C语言中f=f*n表示什么意思
算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n 的函数f(n),算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。时间复杂度用“O(数量级)”来表示,称为“阶”。常见的时间复杂度有: O(1)常数阶;O(log2n)对数阶;O(n)线性阶;O...

PASCAL算法知识题~~高分~紧急~
5:如果能通过穷举找到一个数学算式,就试图找对该公式。(重要)6:记录几个穷举的程序中的段子。每个算法有以上的 6题,要写的算法有:穷举、递归(没递推)、回朔、贪心。 就是4个算法,类似上面的6道题目。总共24道题目。做的我满意的,我会追加很多分的~~~谢谢………很紧急………帮帮我~~~ 展开  我来...

请问这样的穷举算法VB程序要怎么写?
function GetStr(A_Index,S_index) '其中A_index 为数组的叙述 S_index要获取该数组中的第几位数 '假设你的数组就是A StrTmps=split(A(A_index),"-")Counts=ubound(StrTmps)+1 GetStr=StrTmps(S_index mod Counts) '保证了 不同长度的数组这件调用不匹配时不出问题 end function 每三...

C语言程序,输入N个点的坐标,判断能否构成凸多边形
输出两个数组c[0..m ,0..n]和b[1..m ,1..n]。其中c[i,j]存储Xi与Yj的最长公共子序列的长度,b[i,j]记录指示c[i,j]的值是由哪一个子问题的解达到的,这在构造最长公共子序列时要用到。最后,X和Y的最长公共子序列的长度记录于c[m,n]中。 程序如下: #include<stdio.h> #include<string.h>...

用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...

算法题(答对追加100分):n*n矩阵,不同行不同列选n个数 使其和最大 怎么...
先算出以A为左上角的所有矩阵的和(O(N^2))再枚举所有的子矩阵(O(N^4))如:数组按照大小排序,排序的zhi同时记录下行号和列号,如果快速排序,时间复杂度log2(n)*n;遍历排好顺序的数组,两两求和,同行或同列的就跳过,这个过程要遍历(n-1)+(n-2)+...+3+2次,就算时间复杂度为n2;...

C语言中什么叫死循环?怎么避免?
死循环就是不停的执行for循环,while循环。避免死循环要看下死循环是如何产生的,例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。产生死循环的情况有:▪ 逻辑错误 ▪ 变量处理错误 ▪ 奥尔德森循环 ▪ 无穷递归 你可以看下...

简述算法的各种表示形式
并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素……。例如,5!=120,在数组中的存储形式为: 3 0 2 1 …… 首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。 计算...

有n个元素,各有自己的位置,试证明经过奇数次置换后不可能恢复到初始状态...
大几了?有没有学过逆序数的定义?偶排列和奇排列的定义有没有?没有推荐你自己看看。定理:对换改变排列的奇偶性。所以奇数次对换把原来的排列的奇偶性改变了不可能回复。要恢复必须偶数次。

一道有关排列组合的问题(求正整数s分成n个正整数的方法数)
1.将整数r拆分为k个正整数的拆分数,等价于将r拆分为最大数为k的拆分数.证明略,你有兴趣可以去搜索下费勒斯图像.2.将整数r拆分为重复度不超过k的拆分数,等价于将r拆分为不能被k+1整除的拆分数.可以用母函数证明.所以你的第一个问题可以等价成将s拆分为最大数为n的拆分数,或者将s-n拆分为最...

相似回答
大家正在搜