如何获得数字列表的完美平方,除了整数是列表中前一个整数的平方。
对于 30 的输入,结果如下:
1
2
3
square
5
6
7
8
square
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
square
26
27
28
29
30
我只能得到完美正方形的结果,但问题是,我也得到了 16 作为正方形。 它不被认为是正方形,因为 4 已经是一个正方形。谢谢。
如果要检查数字是否为"完全平方":
- 检查 sqrt() 是否为整数。
- 如果是,请检查这是否是质数
如果你想生成完美的正方形,
- 生成质数
- 计算他们的平方
将完美正方形添加到查找数组中,并检查它是否已经是一个完美的正方形,然后忽略它。
用:
<?php
$isAlreadySquare = array();
for($i=1; $i<=30; $i++) {
$isSquare = false;
for($j=1; $j<$i; $j++) {
$s = $j*$j;
if($s==$i && !in_array($j,$isAlreadySquare)) {
$isAlreadySquare[] = $i;
$isSquare = true;
}
}
if($isSquare) {
echo "square<br>";
} else {
echo $i."<br>";
}
}
?>
只是另一种解决方案:
$sq = $u = array();
for($i = 1; $i <= 30; $i++) {
$t = sqrt($i);
if ((int) $t == $t) {
$sq[] = $i;
}
}
foreach ($sq as $v) {
if (!in_array(sqrt($v), $sq)) {
$u[] = $v;
}
}
print_r($u);
Array
(
[0] => 4
[1] => 9
[2] => 25
)
我想
到的解决方案之一是保留查找数组或字典类型的数据结构,当你得到完美的平方时,保持平方值并将条件放成这样,正如你要做的,你可以从下面的查找表中删除元素 满足条件, 因为在排序的数字中,你不会再得到它。
Is Number Perfect square && Not available in lookup table