2014-04-23 12 views
6

Sto lavorando su qualche codice PHP ma sono bloccato con una logica. Ho bisogno di scoprire il numero di quadrati da un rettangolo.Calcola il numero di quadrati da un rettangolo

Non riesco a implementarlo in PHP.

Per favore aiuto.

ho provato questo:

function getcount($length,$breadth,$count=0){ 
    $min=min($length,$breadth); 
    if($length>$breadth){ 
    $length=$length-$min; 
    $count++; 
    return getcount($length,$breadth,$count); 
    } 
    else if($breadth>$length){ 
    $breadth=$breadth-$min; 
    $count++; 
    return getcount($length,$breadth,$count); 
    } 
    else{ 
    $count+=($length/$min); 
    } 
    return $count; 
} 

Ma in qualche modo non passa tutti i casi d'uso. E non so su quali casi d'uso, fallisce?

+5

Scusate per questo ma non posso resistere. Compiti a casa ? – mleko

+0

@mleko No. Non lo è :) Un esempio nel mio allenamento. –

+2

Hai provato qualcosa? Se hai, per favore [modifica] la tua domanda per includere la tua soluzione (comunque difettosa) –

risposta

7

Penso che il modo più semplice per calcolare il numero di quadrati in un rettangolo sia quello di sottrarre i quadrati trovati da esso mentre scompare completamente.

Funziona bene per me:

function getcount($width,$height) { 
    $total=0; 
    while($width && $height) 
    { 
     if($width>$height) 
     { 
      $width-=$height; 
     } 
     else if($height>$width) 
     { 
      $height-=$width; 
     } 
     else 
     { 
      $width=0; 
      $height=0; 
     } 
     $total+=1; 
    } 
    return $total; 
} 

echo getcount(5,3)."<br/>"; 
echo getcount(5,5)."<br/>"; 
echo getcount(11,5)."<br/>"; 

uscita:

4 
1 
7 
0

A mio parere non c'è nulla di sbagliato nel codice. L'uscita dal codice in OP è esattamente la stessa dell'uscita del codice in the accepted answer. È possibile eseguire questo (dove getcount() è la funzione da OP e getcount2() è la funzione da the Balázs Varga's answer):

for ($i=0; $i<10000; $i++) 
{ 
    $a=mt_rand(1,50); 
    $b=mt_rand(1,50); 
    $r1 = getcount($a, $b); 
    $r2 = getcount2($b, $b); 
    if ($r1 != $r2) 
    { 
     echo "D'oh!"; 
    } 
} 

e non tornerà nulla.

L'unico difetto è che il codice genererà un messaggio di avviso quando si esegue getcount(0, 0). Inoltre, la seconda riga del codice ($min=min($length,$breadth);) è un po 'ridondante. Puoi scrivere lo stesso in questo modo:

function getcount($length,$breadth,$count=0){ 
    if($length>$breadth){ 
     $length=$length-$breadth; 
     $count++; 
     return getcount($length,$breadth,$count); 
    } 
    else if($breadth>$length){ 
     $breadth=$breadth-$length; 
     $count++; 
     return getcount($length,$breadth,$count); 
    } 
    else if ($breadth!=0){ 
     $count++; // there is no need to divide two same numbers, right? 
    } 
    return $count; 
} 
Problemi correlati