2013-09-23 15 views
0

怎样才能得到号码列表的一个完美的正方形,除了这是在列表中的前一个整数的平方整数。PHP的日臻完善正方形条件

为以下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已经是一个正方形。谢谢。

+0

你的意思是你也得到16平方? – d3bug3r

+0

是的,在我的结果,我感到,获得16万也行,不过我想向约束,自4已经平方米16应该被忽略。 – Scarface

+2

向我们展示您的代码! – Class

回答

1

添加完美的广场上查找阵列,并检查是否已经是再完美的正方形忽略它。

用途:

<?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>"; 
    } 
} 

?> 
+0

16是一个“广场”,但他不希望出现这种情况... –

+0

是的,这正是我的代码看起来像 – Scarface

+0

回答editted如何,现在就来试试,它会解决你的问题 – Salim

0

一个浮现在我的脑海里是保持查找数组或字典的数据结构,而当你永远得到完美的正方形保持平方值,并把该条件的解决方案因为这样,当你按顺序进行时,你可以从满足条件的查找表中删除元素,因为在排序后的数字中你不会再次得到它。

    Is Number Perfect square && Not available in lookup table 
2

如果你想检查一个数是否是 “完美广场”:

  1. 检查的sqrt()是一个整数。
  2. 如果是,检查,如果这是一个素数

如果你想生成完美的正方形,

  1. 生成素数
  2. 计算它们的平方
1

只是一个另一种解决方案:

$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 
)