0

在此示例中查找可能组合数量的公式是什么:从 AZ 和 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,得到可能的组合数量的公式是什么?

4

4 回答 4

1

交替不影响选择的总数。

它只是 26*10*26*10。

如果不允许字母重复,则为 26*10*25*10。

于 2012-10-03T11:23:30.860 回答
1

答案是26 * 10 * 26 * 10为了length = 4

解释:

对于第一个位置,您有 26 个选择。第二,你有 10 个。可能的变化:26 * 10 第三个位置,你又有 26 个选择。所以你会得到可能的变化:(26 * 10)* 26

等等..

这是基本的组合学。从 26 个中挑选 1 个在数学上表示为26C1等于26/1 = 26

NCR = (N.N-1.N-2 .. N-R-1)/(1.2.3 .. R)

于 2012-10-03T11:31:35.693 回答
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。

于 2012-10-03T15:23:27.713 回答
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
于 2012-10-03T11:09:11.373 回答