Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pętla for oraz if
hunter777
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

Ostrzeżenie: (0%)
-----


mam takie zadanko,
sprawdź tablicę znaków np [1,1,3,4] i jeśli można za pomocą zabrania tylko jednego elementu sprawić by ciąg liczb był rosnący zwróć true.

zrobiłem to tak

  1. function almostIncreasingSequence($sequence) {
  2. $t = $sequence;
  3. $j = count($sequence);
  4.  
  5.  
  6.  
  7. for ($i=0; $i<$j; $i++) {
  8. $a[$i] = $t[$i];
  9. $b[$i] = $t[$i-1];
  10.  
  11. if ($b > $a) {
  12. $c = $c++;
  13.  
  14. return $c; }
  15. }
  16.  
  17. }
  18. if ($c > 2) {
  19.  
  20. return false;
  21.  
  22. } else {
  23.  
  24. return true;
  25. }


ale to niestety nie działa, wychodzi mi z pętli po jednym elemencie...
coś robię nie tak..

ja to wymyśliłem tak, sprawdź każdy element w tablicy i porównaj każdy kolejny z poprzednim i jeśli poprzedni jest większy od następnego to zwiększ licznik, jeśli licznik będzie większy niż 1 tzn, że mam więcej niż jedną liczbę...

poproszę o jakieś sugestie a nie gotowe rozwiązanie, z góry dziękuję
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sabat24
post
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Myślałem, że chcesz osiągnąć coś innego na początku. Zobacz ten kod:

  1. class Sequences {
  2. public function almostIncreasingSequence(array $sequence) {
  3. $j = count($sequence);
  4. for($i = 0; $i < $j; $i++) {
  5. $subsequence_to_check = $sequence;
  6. array_splice($subsequence_to_check, $i, 1);
  7. $is_sequence_increasing = $this->_isSequenceIncreasing($subsequence_to_check);
  8. if ($is_sequence_increasing === TRUE) return $i;
  9. }
  10. return FALSE;
  11. }
  12.  
  13. private function _isSequenceIncreasing(array $sequence) {
  14. $j = count($sequence);
  15. if ($j === 0) return FALSE;
  16. for($i = 0; $i < $j - 1; $i++) {
  17. if ($sequence[$i] >= $sequence[($i + 1)]) return FALSE;
  18. }
  19. return TRUE;
  20. }
  21. }
  22.  
  23. $sequence = new Sequences();
  24. $result = $this->almostIncreasingSequence([1,5,2,4,3]);
  25.  


Zwraca FALSE jeśli się nie da uzyskać ciągu albo indeks, jaki należy usunąć, by otrzymać ciąg rosnący - może zwrócić 0. Też kwestia co powinno zwracać w przypadku przekazania ciągu 1 elementowego albo 2 elementowego, ale to już sobie możesz obsłużyć.

Ten post edytował sabat24 6.11.2017, 20:26:06
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 21:58