Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem u vezi sa php nizovima

[es] :: PHP :: Problem u vezi sa php nizovima

[ Pregleda: 2807 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nemchus
Niš

Član broj: 325635
Poruke: 19
*.exe-net.net.



+2 Profil

icon Problem u vezi sa php nizovima12.02.2015. u 13:30 - pre 111 meseci
Drugari, pokušavam da napišem funkciju koja će iz niza brojeva izbrojati najduži podniz rastućih brojeva? Ako je niz sastavljen od brojeva 2,3,1,4,7,8,0, najduži podniz je 1,4,7, 8 i njega čine 4 brojeva. Ako korisnik unese 0 ili je niz prazan, onda dobija odgovor 0. Uspeo sam da odradim ovaj prvi deo zadatka gde izvlačim najduži niz. Rešenje za unos 0 mi prijavljuje grešku....Evo kako izgleda moj kod. Svaka pomoć je dobrodošla. Hvala unapred.
Code:
<?php 
 function longestSortedSequence($arr)
{
 
    
   $counter = 0;
   $counters = array();
   
   for ($i = 1;$i < count($arr);$i++) {
        if ($arr[$i]>$arr[$i-1] OR $arr[$i]==$arr[$i-1]) {
            
            $counter++;
            array_push($counters,$counter);
            
        }
        else {
            $counter = 0;
        }
}
return max(array_values($counters))+1;
}
 echo "Enter No of elements:";
 $count=trim(fgets(STDIN)); 
 $arr = Array();

 echo "Enter elements:";
 for($i=0;$i<$count;$i++)
 {
        $arr[$i]=trim(fgets(STDIN));
 }
 if (empty($arr) OR $arr[0]==0) {
     echo "0";
     exit;
 } 

 echo "Longest Sequence:";
 echo longestSortedSequence($arr);
 exit;

 
  
?>

"Stop crying Eddie, cuz you can get the fuck out."

"You're gettin' the fuck...
I know you're seven !"

"But you'll be a seven year old
walkin' the dog no house motherfucker !"
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Problem u vezi sa php nizovima12.02.2015. u 13:40 - pre 111 meseci
Možda treba:
Code:

...

if ($count <= 0) {
     echo "0";
     exit;

if ($arr[0]==0) {
     echo "0";
     exit;


...
 
Odgovor na temu

nemchus
Niš

Član broj: 325635
Poruke: 19
*.exe-net.net.



+2 Profil

icon Re: Problem u vezi sa php nizovima12.02.2015. u 13:44 - pre 111 meseci
Prijavljuje mi da je niz $counters prazan i posle te greske dobijem tacan odgovor. Radim zadatak na ovom sajtu, gde odmah dobijes povratnu informaciju: http://www.programmr.com/pract...pcourse_sandbox_1971/node/2164
"Stop crying Eddie, cuz you can get the fuck out."

"You're gettin' the fuck...
I know you're seven !"

"But you'll be a seven year old
walkin' the dog no house motherfucker !"
 
Odgovor na temu

nemchus
Niš

Član broj: 325635
Poruke: 19
*.exe-net.net.



+2 Profil

icon Re: Problem u vezi sa php nizovima12.02.2015. u 13:58 - pre 111 meseci
Izbacim da je niz $counters prazan kada korisnik unese brojeve 5 6 5 4 3 1 kao elemente glavnog niza. Tačan odgovor je 1 i njega dobijem posle ovoga Array must contain at least one element in /view/temp_1423748539/Challenge.phpc on line 20.
"Stop crying Eddie, cuz you can get the fuck out."

"You're gettin' the fuck...
I know you're seven !"

"But you'll be a seven year old
walkin' the dog no house motherfucker !"
 
Odgovor na temu

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Problem u vezi sa php nizovima12.02.2015. u 18:26 - pre 111 meseci
Evo na brzaka logika koju bi trebalo da pratiš. Kad dobiješ na kraju rezultate, mislim da je lako da izvučeš ono što ti treba..

Code (php):

$niz = array( 2,3,1,4,7,8,0 ); // niz koji se proverava

$prethodni_broj = 0; // kada se prolazi kroz petlju niza, ova promenljiva čuva vrednost prethodnog broja u tom nizu
$poslednji_index_rezultata = 0; // označava index niza rezultata
$rezultati = array(); // niz rezultata

// idemo kroz svaki član niza, i proveravamo da li ispunjava uslov da je veći od prethodnog člana
foreach($niz as $index => $broj){

     // prvi element niza - pošto nema prethodnog, proveravamo da li je sledeći veći od njega. Ako jeste, dodajemo trenutni broj u niz rezultata.
     if( $index == 0 ){
         
          // dodaj ovaj broj u rezultate samo ako sledeći broj postoji, i samo ako je veći od trenutnog broja
          if( isset($niz[$index+1]) && $niz[$index+1] >= $broj ){
               $rezultati[$poslednji_index_rezultata][] = $broj;
          }
         
          // dodeljujemo prethodnom broju vrednost ovoga, jer nam treba pri sledećem prolasku kroz foreach.
          $prethodni_broj = $broj;
         
          // forsiraj prelazak na sledeći broj u foreach petlji
          continue;
     }
     
     // >>> naredni elementi niza
     
     // dodaj ovaj broj u rezultate ako je veći od prethodnog broja
     if( $broj >= $prethodni_broj ){
          $rezultati[$poslednji_index_rezultata][] = $broj;
     }
     // u suprotnom kreiraj novi niz rezultata i dodaj ovaj broj kao prvi.
     else{
          $rezultati[][] = $broj;
          $poslednji_index_rezultata++;
     }
     
     // dodeljujemo prethodnom broju vrednost ovoga, jer nam treba pri sledećem prolasku kroz foreach.
     $prethodni_broj = $broj;
     
     // <<< naredni elementi niza

}

print_r($rezultati);

 


Rezultat iz primera iznad:

Code:

Array
(
    [0] => Array
        (
            [0] => 2
            [1] => 3
        )

    [1] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 7
            [3] => 8
        )

    [2] => Array
        (
            [0] => 0
        )

)
 
Odgovor na temu

nemchus
Niš

Član broj: 325635
Poruke: 19
*.exe-net.net.



+2 Profil

icon Re: Problem u vezi sa php nizovima12.02.2015. u 22:51 - pre 111 meseci
Shvatio sam logiku, hvala ti na ovako iscrpnom objašnjenju. :D Kao početniku, svaka pomoć mi je dobrodošla ;)
"Stop crying Eddie, cuz you can get the fuck out."

"You're gettin' the fuck...
I know you're seven !"

"But you'll be a seven year old
walkin' the dog no house motherfucker !"
 
Odgovor na temu

[es] :: PHP :: Problem u vezi sa php nizovima

[ Pregleda: 2807 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.