1152 - Verificare Ordonat Div Imp: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: Cerinta Se dă un vector cu n elemente numere naturale. Folosind metoda Divide et Impera să se verifice dacă are elementele ordonate crescător. Date de intrare Programul citește de la tastatură numărul n, apoi n numere naturale, reprezentând elementele vectorului. Date de iesire Programul afișează pe ecran mesajul DA, dacă vectorul are elementele ordonate crescător, sau NU, în caz contrar. Restrictii si precizari 1 ≤ n ≤ 500 fiecare element al vectorul...
 
Andrada378 (talk | contribs)
No edit summary
Line 1: Line 1:
Cerinta
== Cerința ==
 
Se dă un vector cu n elemente numere naturale. Folosind metoda Divide et Impera să se verifice dacă are elementele ordonate crescător.
Se dă un vector cu n elemente numere naturale. Folosind metoda Divide et Impera să se verifice dacă are elementele ordonate crescător.


Date de intrare
== Date de intrare ==
 
Programul citește de la tastatură numărul n, apoi n numere naturale, reprezentând elementele vectorului.
Programul citește de la tastatură numărul n, apoi n numere naturale, reprezentând elementele vectorului.


Date de iesire
== Date de iesire ==
 
Programul afișează pe ecran mesajul DA, dacă vectorul are elementele ordonate crescător, sau NU, în caz contrar.
Programul afișează pe ecran mesajul DA, dacă vectorul are elementele ordonate crescător, sau NU, în caz contrar.


Restrictii si precizari
== Restricții si precizări ==
 
1 ≤ n ≤ 500
 
fiecare element al vectorului va avea cel mult patru cifre


Exemplu
* 1 ≤ n ≤ 500
* fiecare element al vectorului va avea cel mult patru cifre


Date de intrare  
=== Exemplu ===
'''Date de intrare'''


7
7
Line 25: Line 20:
4 5 7 9 9 10 12  
4 5 7 9 9 10 12  


Date de iesire
'''Date de ieșire'''


DA
DA


''<u>Rezolvare</u>''
== Rezolvare ==
 
<syntaxhighlight lang="python">
def are_elemente_ordonate_crescator(arr):
def ordonat(a, st, dr):
 
    if st == dr:
    if len(arr) <= 1:
        return 1
 
    else:
        return True
        mij = (st + dr) // 2
 
        a1 = ordonat(a, st, mij)
    mijloc = len(arr) // 2
        a2 = ordonat(a, mij + 1, dr)
 
        if a1 == a2 and a[mij] <= a[mij + 1]:
    stanga = arr[:mijloc]
            return 1
 
        else:
    dreapta = arr[mijloc:]
            return 0
 
    return are_elemente_ordonate_crescator(stanga) and are_elemente_ordonate_crescator(dreapta) and stanga[-1] <= dreapta[0]
 
def main():
 
    n = int(input("Introduceți lungimea vectorului: "))
 
    vector = list(map(int, input("Introduceți elementele vectorului separate prin spațiu: ").split()))
 
    rezultat = are_elemente_ordonate_crescator(vector)
 
    if rezultat:
 
        print("DA")
 
    else:
 
        print("NU")


if __name__ == "__main__":
n = int(input())
a = [0] + list(map(int, input().split()))


    main()
if ordonat(a, 1, n):
    print("DA")
else:
    print("NU")
</syntaxhighlight>

Revision as of 19:45, 2 January 2024

Cerința

Se dă un vector cu n elemente numere naturale. Folosind metoda Divide et Impera să se verifice dacă are elementele ordonate crescător.

Date de intrare

Programul citește de la tastatură numărul n, apoi n numere naturale, reprezentând elementele vectorului.

Date de iesire

Programul afișează pe ecran mesajul DA, dacă vectorul are elementele ordonate crescător, sau NU, în caz contrar.

Restricții si precizări

  • 1 ≤ n ≤ 500
  • fiecare element al vectorului va avea cel mult patru cifre

Exemplu

Date de intrare

7

4 5 7 9 9 10 12

Date de ieșire

DA

Rezolvare

<syntaxhighlight lang="python"> def ordonat(a, st, dr):

   if st == dr:
       return 1
   else:
       mij = (st + dr) // 2
       a1 = ordonat(a, st, mij)
       a2 = ordonat(a, mij + 1, dr)
       if a1 == a2 and a[mij] <= a[mij + 1]:
           return 1
       else:
           return 0

n = int(input()) a = [0] + list(map(int, input().split()))

if ordonat(a, 1, n):

   print("DA")

else:

   print("NU")

</syntaxhighlight>