我有以下任务:编写声明数字n的PHP脚本,然后查找小于或等于n且由唯一数字组成的所有3位数字。打印"否"如果不存在这样的数字
我有这段代码:
<?php
$number = 1522;
for ($i = 0; $i < $number; $i++) {
$numberLenght = strlen((string)$i);
if ($numberLenght == 3) {
echo $i . ' ';
} else if ($number < 100) {
echo "No";
}
}
它仅适用于大于100的数字。当我更改例如1的$ number的值时,它会显示空白,而不是&#34;否&#34;
答案 0 :(得分:5)
出于学习目的,这样的任务可以通过将其分解为功能来最好地解决,这样您就可以更清楚地看到正在发生的事情。所以,例如我们有这些规则:
n
因此,我们可以编写3个接受$i
值和$n
值的函数,并返回true / false。
function isThreeDigits($i) {
if ((int) $i > 99 && (int) $i < 1000) {
return true;
}
return false;
}
function isLessThanN($i, $n) {
return (bool) ((int) $i < (int) $n);
}
function isUniqueDigits($i) {
$parts = str_split((string) $i);
$initialCount = count($parts);
$uniqueCount = count(array_unique($parts));
if ($initialCount === $uniqueCount) {
return true;
}
return false;
}
使用这三个功能,我们可以检查所有内容:
$n = 1522;
for ($i = 0; $i < $n; $i++) {
if (isThreeDigits($i) && isLessThanN($i, $n) && isUniqueDigits($i)) {
echo "MATCH: $i \n";
} else {
echo "NO \n";
}
}
答案 1 :(得分:2)
我猜你在这一行中使用了错误的变量?
else if ($number < 100) {
而不是检查当前值($ i)是否小于100,而是比较$ number(这是一个静态值)。
答案 2 :(得分:0)
这比你的工作要好得多。
$number = 1522;
if($number < 100) exit('No');
for($i = 100; $i <= $number && $i < 1000; $i++){
$t = str_split($i);
if( count($t) == count(array_unique($t)) ) echo $i . ' ';
}
也就是说,@ jeremy-harris发布的答案也是正确的,他作为一种学习工具可能更有用。
这稍微优化一下,但使用与他的解决方案相同的基本原理。如果这是某种家庭作业(看起来像是这样),重要的是你要理解为什么上面的代码有效并且你不只是用它来完成任务。