你好,我正在制作一个程序,让我帮助生成一个具有指定限制的随机字符串和*&#
的随机字符串,但是*&#
的组合不应该重复。
例如:如果输入3,那么O / P应为
#**
**#
**#
它应该生成一个长度为3到3行的随机字符串,不同的模式也不应该重复。我使用的是以下代码,但无法实现。
$n = 3;
for($i = 0; $i < n; $i++)
{
for($j=0;$j<=$n;j++)
{
echo "*#";
}
echo "<br />";
}
但是我无法生成输出,我的逻辑失败在哪里?
答案 0 :(得分:1)
如果要确保相同的模式不会出现多次,则必须保留生成的字符串的记录。在最基本的形式中,它可能看起来像这样:
public function generate() {
$amount = 3; // The amount of strings you want.
$generated_strings = []; // Keep a record of the generated strings.
do {
$random = $this->generateRandomString(); // Generate a random string
if(!in_array($random, $generated_strings)) { // Keep the record if its not already present.
$generated_strings[] = $random;
}
} while(sizeof($generated_strings) !== $amount); // Repeat this process until you have three strings.
print_r($generated_strings);
}
public function generateRandomString($length = 3) {
$characters = '*&#';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
答案 1 :(得分:1)
您可以使用while循环和数组来执行此操作。
我首先有一个可能有字符的数组
然后我循环直到结果数组需要长度。
我使用数组唯一来删除循环内的任何重复。
我使用rand(0,2)从可能的字符数组中“选择”一个随机字符。
$arr = ["*", "&", "#"];
$res = array();
$n =7;
While(count($res) != $n){
$temp="";
For($i=0;$i<$n;$i++){
$temp .= $arr[Rand(0,count($arr)-1)];
}
$res[] = $temp;
$res = array_unique($res);
}
Var_dump($res);
更新了超出OP未明确规定的范围细节。
答案 2 :(得分:1)
不一定是最优化的算法,但它应该有效。
我正在使用一个字符串生成器,有点随机,结合你提供的字符。第二部分是使用生成的字符串填充输出数组。
<?php
function randomize($n) {
$s = '';
for ($i = 0; $i < $n; $i++) {
$s. = (rand(0, 10) < 5 ? '*' : '#');
}
return $s;
}
$n = 3;
$output = array();
for ($i = 0; $i < $n; $i++) {
$tmp = randomize($n);
while (in_array($tmp, $output)) {
$tmp = randomize($n);
}
$output[] = $tmp;
}
print_r($output);