0364 - Cifre 1: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
sursa: [https://www.pbinfo.ro/probleme/364/cifre1]
== Cerinţa ==
== Cerinţa ==
Se dau un numar de numere naturale. Determinați numărul pentru care prima cifră este maximă.
Se dau un numar de numere naturale. Determinați numărul pentru care prima cifră este maximă.
Line 18: Line 19:
: 2467 645 687 59878 125
: 2467 645 687 59878 125
; Ieșire
; Ieșire
: Datele introduse sunt valide.
: Datele sunt introduse corect.
: 687
: 687


Line 25: Line 26:


== Rezolvare ==
== Rezolvare ==
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
def citeste_numar_intreg(mesaj):
    while True:
        try:
            numar = int(input(mesaj))
            return numar
        except ValueError:
            print("Introduceți un număr valid.")
def determina_numar_maxim(n):
    max_num = -1
    max_first_digit = -1
    for i in range(n):
        while True:
            num = citeste_numar_intreg(f"Introduceți numărul {i + 1}: ")
            if num < 10:
                print("Numărul trebuie să fie natural și să aibă cel puțin două cifre.")
                continue
            break
        first_digit = int(str(num)[0])
        if first_digit > max_first_digit:
            max_first_digit = first_digit
            max_num = num
        elif first_digit == max_first_digit and num > max_num:
            max_num = num
    return max_num
if __name__ == "__main__":
    while True:
        n = citeste_numar_intreg("Introduceți numărul de numere: ")
        if n < 1 or n > 1000:
            print("Numărul de numere trebuie să fie un număr natural între 1 și 1000.")
            continue
        break
    numar_maxim = determina_numar_maxim(n)
    print("Datele sunt introduse corect.")
    print(f"Numărul cu prima cifră maximă este {numar_maxim}.")
</syntaxhighlight>
=== Rezolvare ver. 2 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


Line 79: Line 131:
# Afisam rezultatul
# Afisam rezultatul
print(f"Numărul cu prima cifră maximă este {max_num}.")
print(f"Numărul cu prima cifră maximă este {max_num}.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 23:27, 15 May 2023

sursa: [1]

Cerinţa[edit | edit source]

Se dau un numar de numere naturale. Determinați numărul pentru care prima cifră este maximă.

Date de intrare[edit | edit source]

Programul citește de la tastatură un număr, iar apoi acel numar de numere naturale, separate prin spaţii.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numărul cerut

Restricții și precizări[edit | edit source]

  • 1 ≤ numar ≤ 1000
  • cele n numere citite vor avea cel mult 9 cifre
  • dacă există mai multe numere pentru care prima cifră este maximă, se va determina cel mai mare dintre acestea

Exemplu[edit | edit source]

Intrare
5
2467 645 687 59878 125
Ieșire
Datele sunt introduse corect.
687

Explicatie[edit | edit source]

Există două numere pentru care prima cifră este maximă. Dintre acestea, cel mai mare este 687.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_numar_intreg(mesaj):

   while True:
       try:
           numar = int(input(mesaj))
           return numar
       except ValueError:
           print("Introduceți un număr valid.")


def determina_numar_maxim(n):

   max_num = -1
   max_first_digit = -1
   for i in range(n):
       while True:
           num = citeste_numar_intreg(f"Introduceți numărul {i + 1}: ")
           if num < 10:
               print("Numărul trebuie să fie natural și să aibă cel puțin două cifre.")
               continue
           break
       first_digit = int(str(num)[0])
       if first_digit > max_first_digit:
           max_first_digit = first_digit
           max_num = num
       elif first_digit == max_first_digit and num > max_num:
           max_num = num
   return max_num


if __name__ == "__main__":

   while True:
       n = citeste_numar_intreg("Introduceți numărul de numere: ")
       if n < 1 or n > 1000:
           print("Numărul de numere trebuie să fie un număr natural între 1 și 1000.")
           continue
       break
   numar_maxim = determina_numar_maxim(n)
   print("Datele sunt introduse corect.")
   print(f"Numărul cu prima cifră maximă este {numar_maxim}.")

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

while True:

   try:
       # Citim numărul de numere de la tastatură
       n = int(input("Introduceți numărul de numere: "))
       # Verificăm dacă numărul este între 1 și 1000
       if n < 1 or n > 1000:
           print("Numărul de numere trebuie să fie un număr natural între 1 și 1000.")
           continue
       # Dacă numărul este corect, ieșim din bucla while
       break
   except ValueError:
       # Dacă utilizatorul introduce o valoare care nu poate fi convertită într-un număr întreg,
       # afișăm un mesaj de eroare și reluăm citirea
       print("Introduceți un număr valid.")
  1. Inițializăm variabilele max_num și max_first_digit cu valori minime

max_num = -1 max_first_digit = -1

  1. Citim cele n numere de la tastatură și determinăm numărul cu prima cifră maximă

for i in range(n):

   while True:
       try:
           # Citim numărul i de la tastatură
           num = int(input(f"Introduceți numărul {i + 1}: "))
           # Verificăm dacă numărul are cel puțin două cifre
           if num < 10:
               print("Numărul trebuie să fie natural și să aibă cel puțin două cifre.")
               continue
           # Dacă numărul este corect, ieșim din bucla while
           break
       except ValueError:
           # Dacă utilizatorul introduce o valoare care nu poate fi convertită într-un număr întreg,
           # afișăm un mesaj de eroare și reluăm citirea
           print("Introduceți un număr valid.")
   # Determinăm prima cifră a numărului
   first_digit = int(str(num)[0])
   # Verificăm dacă prima cifră a numărului este mai mare decât oricare alta primă cifră întâlnită până acum
   if first_digit > max_first_digit:
       # Dacă da, actualizăm variabilele max_num și max_first_digit cu valorile corespunzătoare
       max_first_digit = first_digit
       max_num = num
   # Dacă prima cifră a numărului este egală cu cea mai mare primă cifră întâlnită până acum,
   # verificăm dacă numărul este mai mare decât cel mai mare număr cu prima cifră maximă întâlnit până acum
   elif first_digit == max_first_digit and num > max_num:
       # Dacă da, actualizăm variabila max_num cu noul număr
       max_num = num

print("Datele sunt introduse corect.")

  1. Afisam rezultatul

print(f"Numărul cu prima cifră maximă este {max_num}.")

</syntaxhighlight>