2013-09-23 33 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 
)