在此示例中查找可能的组合数的公式是什么:从A-Z和0-9生成4个字符,但它们将是交替的。例如:L7W8,Q6N6,H3P1等。
用PHP代码说明:
$length = 4;
$pool_1 = explode(',', 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z');
$pool_2 = explode(',', '1,2,3,4,5,6,7,8,9,0');
$s = '';
for ($i = 0; $i < $length; $i++)
$s.= ($i % 2) ? $pool_2[array_rand($pool_2)] : $pool_1[array_rand($pool_1)];
echo $s;
如果$ length为4,那么获得可能的组合数的公式是什么?
答案 0 :(得分:1)
交替不会影响选择的总数。
只是26 * 10 * 26 * 10.
如果您不允许以字母重复,则为26 * 10 * 25 * 10.
答案 1 :(得分:1)
26 * 10 * 26 * 10
length = 4
说明:
对于第一个位置,你有26个选择。第二,你有10.可能的变化:26 * 10 对于第三个位置,你再次获得26个选择。所以你会得到可能的变化:(26 * 10)* 26
依旧......
这是基本的combinatorics。 26个中的1个在数学上表示为26C1
,等于26/1 = 26
。
NCR = (N.N-1.N-2 .. N-R-1)/(1.2.3 .. R)
答案 2 :(得分:0)
对于最终字符串中的每个字符,您可以乘以可能的插入数。
Choice of A-Z = 26
Choice of 0-9 = 10
Combining A-Z and 0-9: 26 * 10 = 260
Combining A-Z and A-Z: 26 * 26 = 676
Combining 0-9, A-Z, 0-9: 10 * 26 * 10 = 2600
答案 3 :(得分:0)
如果您正在寻找独特的组合,那么公式将为:
(26 * 25)/ 2! *(10 * 9)/ 2! = 14625
分析:
上述公式假设您需要字母和数字的唯一组合。例如,B1A0将是序列中的第一个值,Z9Y8将是最后一个值。 A0B1,A1B0或B0A1都是重复的,并未反映在上述公式中。如果这些也可以允许,那么公式将减少为:
26 * 25 * 10 * 9 = 58500
如果允许重复的字母和数字,例如AA00,则公式为:
26 * 26 * 10 * 10 = 67600
我还建议将$ length分成两个单独的变量。一个变量用于字母,另一个变量用于数字。因此,例如,如果您正在寻找独特的组合,那么您的代码可能如下所示:
$NumLetters = 26;
$NumNumbers = 10;
$LettersLen = 2;
$NumbersLen = 2;
$NumCombos = $NumLetters * ($NumLetters-1) / gmp_fact($LettersLen) * $NumNumbers * ($Numbers-1) / gmp_fact($NumbersLen);
如果您知道$ NumbersLen或$ LettersLen始终为2,那么您可以取消对gmp_fact的调用并将其替换为数字2.