Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android

Recomandare bicicleta e-bike 20&#...
 Bing-Content removal tool

Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?

Wc Geberit
 Routere detinute in trecut si in ...

Teii din fața casei

E-Mail in serie prin Excel si Out...

Modul alimentare rulou/jaluzea ex...
 Recuperare fișiere dupa form...

Aplicatii stress test RAM

Asigurare auto hibrid

Asus B550M - PC-ul nu porneste di...
 

sir munte

- - - - -
  • Please log in to reply
13 replies to this topic

#1
cristian2021trt

cristian2021trt

    New Member

  • Grup: Candidate Members
  • Posts: 18
  • Înscris: 09.03.2021
Salut , am o problema care ma da putin peste cap ... putin ajutor? Trebuie sa citesc elementele de la tastatura si sa verific daca e munte sau nu.

Cerinta :

Un șir munte este un șir în care există un singur indice i ce verifică proprietațiile:
2 ≤ i ≤ N - 1, unde N reprezintă numarul de elemente din șir
-toate elementele de la 1 pană la i sunt în ordine strict crescătoare
-toate elementele de la i până la N sunt în ordine strict descrescătoare
Se dă un șir format din N numere. Să se verifice dacă șirul dat reprezintă sau nu un șir munte.

Date de intrare
Pe prima linie se află N, dimensiunea șirului. Pe următoarea linie sunt N numere naturale, reprezentand elementele sirului.
Date de ieșire
Se va afișa : DA dacă șirul dat este munte, sau NU în caz contrar.

iar codul meu arata asa :

#include <iostream>
using namespace std;
int main() {
    int N, x, y;
    cin >> N >> x;
    int i = 1, ascending = 0, descending = 0;
    while (i < N) {
    cin >> y;
if (x < y) {
    ascending = 1;
} else if (x > y) {
    descending = 1;
    }
    x = y;
        ++i;
    }
    if (ascending == 1 && descending == 1) {
    cout << "DA";
    } else {
    cout << "NU";
    }
    return 0;
}

#2
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,979
  • Înscris: 24.02.2006
codul tau considera ca un sir "vale" este de fapt sir "munte" :). conteaza daca descending devine 1 desi ascending este 0
in plus, nu trastezi deloc "platourile". orice "x == y" ar trebui sa insemne ca nu e "munte".

#3
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Problema cu codul tău este că odată ce ai găsit o pereche x < y și o pereche x > y declari că e munte, chiar dacă genul acesta de perechi pot sa apară și în șiruri care nu sunt munte.

Pentru șirul
1 2 3 4 5 4 3 4 2 1
1 < 2, deci ascending este setat 1 și 5 > 4, deci descending este setat pe 1, dar șirul nu este munte pentru că după 5 coborăm la 3 și apoi urcăm la 4 după care coborâm la 1.

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Daca ai fi rezolvat problemele anterioare mai curat, acum tot ce trebuia sa faci era sa adaugi un argumennt unui subprogram ("care se asteapta la un sir crescator resectiv descrescator). Diferenta ar fi cand se opreste subprogramul, in cazul problemei de fata, se opreste la i sau cand se intrerupe 'trendul'

munte = expectUp(steps);

if (munte) munte = expectDown(steps);


in acest exemplu subprogramele vor intoarce 0 daca nu se indeplineste conditia asteptata



Edited by MarianG, 17 March 2021 - 08:49.


#5
cristian2021trt

cristian2021trt

    New Member

  • Grup: Candidate Members
  • Posts: 18
  • Înscris: 09.03.2021

View Posttavitu, on 17 martie 2021 - 08:17, said:

Problema cu codul tău este că odată ce ai găsit o pereche x < y și o pereche x > y declari că e munte, chiar dacă genul acesta de perechi pot sa apară și în șiruri care nu sunt munte.

Pentru șirul
1 2 3 4 5 4 3 4 2 1
1 < 2, deci ascending este setat 1 și 5 > 4, deci descending este setat pe 1, dar șirul nu este munte pentru că după 5 coborăm la 3 și apoi urcăm la 4 după care coborâm la 1.

da am vazut asta pe urma.... ar trebui sa ma folosesc de niste extra variabile auxiliare? Tin sa precizez ca trebuie rezolvata problema doar cu while si if

#6
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Nu ai nevoie de cine știe ce variabile auxiliare. Trebuie să verifici că primele i elemente sunt în ordine strict crescătoare și apoi că următoarele elemente sunt în ordine strict descrescătoare. Trebuie să procesezi șirul ca două subșiruri, să verifici că un șir este strict crescător, și să verifici că un șir este strict descrescător, gândește-te cum ai rezolva in mod separat aceste probleme. Soluția la problema ta constă în a combina într-un mod oarecum evident și simplu soluțiile la subproblemele astea.

#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Vad aceleasi greseli ca la problema anterioara, unde verifici un singur sir daca-i crescator sau nu. Rezolvo pe aceea conform indicatiilor si apoi revino la asta mai complexa.

#8
Irbaa

Irbaa

    Junior Member

  • Grup: Junior Members
  • Posts: 54
  • Înscris: 15.03.2022
Salut, am incercat si eu sa rezolv problema. Am ajuns in punctul in care am aflat maximul sirului . Stiu ca trebuie sa despart sirul in doua si sa-i gasesc directia in functie de maxim. Crescator sau descrescator, doar ca nu stiu sa fac asta. Deocamdata am ajuns aici :
#include <iostream>
using namespace std;
int main() {
  int n, a , b , max;
  cin >> n;
  cin >> a;
  n = n - 1;
  while (n > 0){
	  cin >> b;
	  if (b > a){
		  max = b;
		
	  }
	
	  a = b;
	  --n;
	
  }

   return 0;
}

  Sa aflu ca este crescator pana la max, e realizabil, dar dupa max, sa vad daca e descrescator mini-sirul e o provocare pentru mine.

Edited by MarianG, 17 April 2022 - 13:44.


#9
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
care este maximul sirului este oarecum irelevant, ideea este sa ajungi pana acolo in mod crescator

#10
Irbaa

Irbaa

    Junior Member

  • Grup: Junior Members
  • Posts: 54
  • Înscris: 15.03.2022
Nu pot sa-mi dau seama cum altfel. Fara un punct de reper , cum ar fii maximul sirului, nu pot sa-mi dau seama cum sa rezolv. La tot ce ma pot gandi este sa gaesc maximul iar apoi sa verificm daca e crescator pana la el si descrescator de la el in capat. Dar nu am cum sa pastrez maximul intr-o variabila fiindca maximul practic va exista intr-un numar de sine statator doar dupa incheierea buclei. Deci , nu am cum. Apoi m-am gandit sa aflu pozitia maximului, dar nici asa  nu e bine fiindca toate aceste valori vor fii disponibilie la sfarsitul buclei, iar daca ies din ea pierd valorile sirului . Deci, praf sunt :))

#11
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Si cine te forteaza sa folosesti doar o variabila ?

#12
Irbaa

Irbaa

    Junior Member

  • Grup: Junior Members
  • Posts: 54
  • Înscris: 15.03.2022
Poi nu am ce sa fac cu alte variabile daca ies din while. Nu stiu cum sa pastrez valorile sirului ca mai apoi sa compar numerele sirului pe pozitii. Aflu ce pozitie are cel mai mare numar. De ex cel  mai mare numar sa presupunem ca este pe pozitia a 5-a din 7 . Compar primele 5 numere sa vad daca sunt crescatoare iar apoi ultimele doua sa vad daca sunt descrescatoare.

#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Corect! Nu stii, dar nu este ca si cum nu ti-as fi prezentat cod care face asa ceva in problemele precedente.
char minge[8] = {'\0'};
char numar[8] = {'\0'};
int resultat;
char sterge;
scanf("%8s %1s", &minge, &sterge);
int pozitie, cifra=0;

/* facem o copie dupa sir */
Bine eu aveam un sir de caractere, tu acum vrei un sir de numere intregi.

Edited by MarianG, 17 April 2022 - 20:25.


#14
Irbaa

Irbaa

    Junior Member

  • Grup: Junior Members
  • Posts: 54
  • Înscris: 15.03.2022
Ok, rezolvarea problemei, sau ma rog, una din rezolvarile problemei este aceasta:
#include <iostream>
using namespace std;
int main(){
int tip_sir = 0, n, x, nr_anterior = 0, i;
cin >> n;
cin >> nr_anterior;
i = 1;
while (i < n){
cin >> x;
if (x > nr_anterior && tip_sir == 0)
  tip_sir = 1;
if (x < nr_anterior && tip_sir == 0)
  tip_sir = 3;
if (x < nr_anterior && tip_sir == 1)
  tip_sir = 2;
if (tip_sir == 2 && x > nr_anterior)
  tip_sir = 3;
if (x == nr_anterior)
  tip_sir = 3;
nr_anterior = x;
i++;
}
if (tip_sir == 2)
cout << "1";
else
cout << "0";
return 0;
}

Insa  nu unt capabil sa o inteleg . In ce fel influenteaza programul acel "tip_sir" si cum poate in functie de asta sa verifice sirul. Ce rol are? Imi poate explica cineva , va rog frumos rezolvarea ca la prosti.

Edited by MarianG, 18 April 2022 - 19:25.
Vei invata sa folosesti tag-urile CODE.


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate