我试图创建一个程序来计算字母的所有排序可能性,这是它的逻辑。你只需输入调用函数,就有2 ^ n(n是输入值)的可能性。如果输入3,我们知道存在8种情况,系统通过计算输入值生成自动字符串,例如:ABC。并且类似:
ABC
ABc
AbC
Abc
aBC
aBc
abC
abc
正如您所看到的,通过将可能性每次分为2,将字母大写或小写。在我的for循环中,我无法解决这个问题,你能帮助我吗?这是代码:
function f($hyb, $rand=false) {
$result="";
$characters=array("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");
if ($rand) {
shuffle($characters);
}
for ($i=1; $i<=pow(2, $hyb); $i++) {
$string=implode(array_slice($characters, 0, $hyb));
if ($i%2==1) {
}
else if ($i%2==0) {
}
}
return $result;
}
echo f(2);
应该返回AB Ab aB ab
答案 0 :(得分:2)
以下功能可以满足您的需求。
function f($x) {
$result = array();
$characters = range("A", "Z");
$max = pow(2, $x);
for ($i = 0; $i < $max; $i++) {
$val = "";
$bit = pow(2, $x);
for ($y = 0; $y < $x; $y++) {
$bit >>= 1;
$chr = $characters[$y];
if ($i & $bit) {
$chr = strtolower($chr);
}
$val .= $chr;
}
$result[] = $val;
}
return $result;
}
与你的函数有一些不同之处:没有实现shuffle函数,上面的函数返回一个数组而不是一个字符串。