Ⅰ 关于全组合算法
参照我的回答:VBA 6~15个数中,任选6个数排列组合:http://..com/question/289742264.html
调整一下递归函数Private Sub zuhe(L As Integer, M As Integer)调用的M参数取值(可重复与不可重复有一点区别)
Ⅱ 组合的算法
高中数学题?
排列组合可以算,不过要分情况
具体如下
3个盒子放球
当3个盒子内有0个球相同(即0个种族相同,也就是ZTP各一族)时只有一种情况
当3个盒子内有2个球相同时(即有一个种族相同),因共有3个种族,于是要从3个种族内选一个出来做相同的族,再从剩下2种族内选一个做落单的族,又因为没顺序,是组合问题
即C31*C21=6
当3个盒子内有3个球相同时,有3种可能,即都是Z,都是T,都是P,故也是3种
综上共有1+3+6=10种
Ⅲ 求组合算法.
思路1(没实现):这题越做越明白,最后一个全组合问题我没解决好~我是这样想的:求出全排列-->对于所有全排列所有单个元素一个组合(共有N个元素就N个组合)-->对于所有全排列所有元素组成(N-1)个可能的组合-->对于所有全排列所有元素组成(N-2)个可能的组合-->-->到所有元素一个组合这样做有个问题是重复问题,因为是对所有元素组合,思路2:求出这几个元素的所有可能组合,然后在输出结果的时候遍历所有组合,将所有组合联合起来和输入的数据一致。比如:{a,b}组合,遍历所有组合后加上一个{c}即可和输入一致每个组合都为一行,然后去匹配以下我思路1的未代码:/*思路:得到输入字符串不重复全排列,然后逐层组合*/#include#includeusingnamespacestd;/*将输入转字符串格式*/voidInput2Str(char*dest,char*input){intlen=strlen(input);for(inti=0;i&result){if(*begin=='\0'){result.push_back(str);}else{for(char*pCh=begin;*pCh!='\0';pCh++){if(IsSwap(begin,pCh)){swap(*begin,*pCh);Perm(str,begin+1,result);swap(*begin,*pCh);}}}}voidprint(vector&result){cout::iteratoriter=result.begin();intlen=strlen((*iter).c_str());for(;iter!=result.end();++iter){cout>input;Input2Str(inputStr,input);vectorresult;Perm(inputStr,inputStr,result);print(result);return0;}
Ⅳ 组合算法.
看你的数学学的如何了,
转化为数学模型,然后在用某种计算机语言叙述出来就可以了.
Ⅳ 算法;1-9的所有组合
数字: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
可能:0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1
每个数字都只有两种可能:出现或不出现(0或1)
所以所有的可能性有2的9次方,也就是512种
Ⅵ 全组合的算法
总共有26*10*26种可能,如果把没一个A、B、C的取值进行编号,那么序号与A、B、C的关系可以是:
序号I=26*26*B+26*A+C=26(26B+A)+C
那么:
C=I%26
A=(I-C)/26%26
B=(I-C-26A)/26/26
用一重循环来实现上述组合的枚举,程序如下:
main(){
int i,a,b,c;
for (i=0;i<26*10*26;i++){
c=i%26;
a=(i-c)/26%26;
b=(i-c-26*a)/26/26;
printf("%c%c%c ",a+'A',b+'0',c+'A');
}
}
这实际上是使用的26进制数来实现的,这个26进制三位数是BAC,值等于I,当有更多变量的时候,方法是类似的。
Ⅶ 什么是组合算法和组合问题
给你解释下 A(4,6)的意思 A(4,6)的意思是对6个数中的4个做组合的情况个数
首先,第一个数的位置有多少种情况?是6种,在这之后第二个数呢,因为第一个数占据了一个位置所以是5种 以此类推后面是4、3种 那为什么是6*5*4*3呢 而不是6+5+4+3呢 因为这四个事件不是互斥的
C(4,6) = A(4,6) / (4 * 3 * 2 * 1) 为什么要除以4 * 3 * 2 * 1呢 C(4,6)的意思是从6个数中取出4个数 但是不要求排序 这点是和A是有区别的 因为A(4,6)不仅取出了4个数而且对4个数进行了排序 也就是说在C(4,6)中每次从6个数中取出4个数的情况数是1 而在A(4,6)中的情况数却是A(4,4) 所以这个比例关系是 1:A(4,4)的关系 所以要除以A(4,4) 也就是C(4,6) = A(4,6) / A(4,4)
不知道我这样说你能不能听明白
Ⅷ 求一个组合公式的算法
1.选择的数字不重复,有 3 =4 种方法
C4
2.选择的数字中有一个重复的,有 2 1 =6*2=12种方法
C4 * C2
3.选择的数字中有两个重复的,有 1 = 4种方法
C4
总共有4+12+4=20种方法
从12个数字中选3次,有12*11*10/6+2*12*11/2+12=220+132+12=364种方法
Ⅸ 高分求组合算法
首先,第一个问题,求2,4,5,8是第几个组合,首先原始程序语言算法如下:
for(i=1;i<=9-4;i++)
{
for(j=i+1;j<=9-3;j++)
{
for(k=j+1;k<=9-2;k++)
{
for(m=k+1;m<=9-1;m++)
{
num++;
}
}
}
}
以上是求得总组合数的原始算法,现假设存在变量p1,p2,p3,p4,其初始值分别为1,2,3,4分析以上算法,当第一个数p1变为2时,此时p2,p3,p4已经进行了一次C(8,3)==56的全组合,当运算56次的时候,数组组合状态为2,3,4,5,接着,p1不变,p2从3,运行到4的时候,表示p3,p4,进行了一次C(6,2)=15的全组合,此时组合状态为2,4,5,6接着,p1,p2,不变,p3符合要求,本身不变,接着,p4从6运行到8,进行了2次运算,故,得出,2,4,5,8是第56+15+2=73次排列。
第二个问题:已知存在数列1-9,求第73次排列数组是什么,
答:依旧设存在变量p1,p2,p3,p4,初始状态为1,2,3,4,计算,当p1,由1变为2时,进行了C(8,3)=56次运算,如果p1继续变为3,则,进行了56+C(7,3)=56+35=91>73要求值,故,此时我们确定了p1的值为2,此时的组合状态为;2,3,4,5,接着计算p2,当p2,由3变为4时,进行了C(6,2)=15次运算,如果p2继续由4,变为5,则继续进行了C(5,2)=10次运算,计算56+15+10=81>73故确定了p2为4,而不能是5;接着,方法同上,得到p3=5,p4=8。完成!