0364 - Cifre 1

From Bitnami MediaWiki

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>