2016 - Vuli: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Enunț == Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie k care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu 1). Triunghiu...
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Enunț ==
== Enunț ==
Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie k care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu 1). Triunghiul lui Pascal ce generează astfel: P[0][0] = 1, P[i][j] = P[i - 1][j] + P[i - 1][j - 1]. Vuli este perfect capabil să elaboreze singur un algoritm pentru a determina șirul de numere fabuloase de pe linia k, dar acum este prins cu probleme mai complicate, așa că vă roagă pe voi să-l ajutați.
Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie '''k''' care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu '''1'''). Triunghiul lui Pascal ce generează astfel: '''P[0][0] = 1, P[i][j] = P[i - 1][j] + P[i - 1][j - 1]'''. Vuli este perfect capabil să elaboreze singur un algoritm pentru a determina șirul de numere fabuloase de pe linia k, dar acum este prins cu probleme mai complicate, așa că vă roagă pe voi să-l ajutați.
== Cerința ==
== Cerința ==
Se cere să se afișeze în ordine crescătoare toate numerele fabuloase de pe linia k a triunghiului.
Se cere să se afișeze în ordine crescătoare toate numerele fabuloase de pe linia '''k''' a triunghiului.
== Date de intrare ==
== Date de intrare ==
Se citește din fișierul de intrare vuliin.txt un număr k ce reprezintă indicele liniei din triunghiului lui Pascal.
Se citește din fișierul de intrare '''vuliin.txt''' un număr '''k''' ce reprezintă indicele liniei din triunghiului lui Pascal.
== Date de ieșire ==
== Date de ieșire ==
Se va afișa în fișierul vuliout.txt, pe prima linie, numerele fabuloase de pe linia k a triunghiului, în ordine crescătoare.
Se va afișa în fișierul '''vuliout.txt''', pe prima linie, numerele fabuloase de pe linia '''k''' a triunghiului, în ordine crescătoare.
== Restricții și precizări ==
== Restricții și precizări ==
*1 ⩽ k ⩽ 40
*'''1 ⩽ k ⩽ 40'''
== Exemplu 1 ==
== Exemplu 1 ==
;vuliin.txt
;'''vuliin.txt'''
:5
:5
;vuliout.txt
;'''vuliout.txt'''
:1 5 10  
:1 5 10  
<br>
<br>
== Exemplu 2 ==
== Exemplu 2 ==
;vuliin.txt
;'''vuliin.txt'''
:0
:0
;vuliout.txt
;'''vuliout.txt'''
: Nu au fost respectate cerintele impuse
: Nu au fost respectate cerintele impuse
<br>
<br>
Line 30: Line 30:
         if num % i == 0:
         if num % i == 0:
             return False
             return False
     return print("Nu au fost respectate cerintele impuse.")
     return True


def sum_of_digits(num):
def sum_of_digits(num):
Line 36: Line 36:


def generate_fabulous_numbers(k):
def generate_fabulous_numbers(k):
    if k <= 0:
        return None
     triangle = [[1]]
     triangle = [[1]]
     fabulous_numbers = set()
     fabulous_numbers = set()
Line 56: Line 59:
         k = int(file_in.readline().strip())
         k = int(file_in.readline().strip())
         fabulous_numbers = generate_fabulous_numbers(k)
         fabulous_numbers = generate_fabulous_numbers(k)
         file_out.write(" ".join(map(str, fabulous_numbers)))
 
         if fabulous_numbers:
            file_out.write(" ".join(map(str, fabulous_numbers)))
        else:
            file_out.write("Nu au fost respectate cerintele impuse.")


if __name__ == "__main__":
if __name__ == "__main__":

Latest revision as of 12:58, 6 January 2024

Enunț[edit]

Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie k care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu 1). Triunghiul lui Pascal ce generează astfel: P[0][0] = 1, P[i][j] = P[i - 1][j] + P[i - 1][j - 1]. Vuli este perfect capabil să elaboreze singur un algoritm pentru a determina șirul de numere fabuloase de pe linia k, dar acum este prins cu probleme mai complicate, așa că vă roagă pe voi să-l ajutați.

Cerința[edit]

Se cere să se afișeze în ordine crescătoare toate numerele fabuloase de pe linia k a triunghiului.

Date de intrare[edit]

Se citește din fișierul de intrare vuliin.txt un număr k ce reprezintă indicele liniei din triunghiului lui Pascal.

Date de ieșire[edit]

Se va afișa în fișierul vuliout.txt, pe prima linie, numerele fabuloase de pe linia k a triunghiului, în ordine crescătoare.

Restricții și precizări[edit]

  • 1 ⩽ k ⩽ 40

Exemplu 1[edit]

vuliin.txt
5
vuliout.txt
1 5 10


Exemplu 2[edit]

vuliin.txt
0
vuliout.txt
Nu au fost respectate cerintele impuse


Rezolvare[edit]

<syntaxhighlight lang="python" line>

  1. 2016 - Vuli

def is_prime(num):

   if num < 2:
       return False
   for i in range(2, int(num**0.5) + 1):
       if num % i == 0:
           return False
   return True

def sum_of_digits(num):

   return sum(int(digit) for digit in str(num))

def generate_fabulous_numbers(k):

   if k <= 0:
       return None
   triangle = 1
   fabulous_numbers = set()
   for i in range(1, k + 1):
       row = [1]
       for j in range(1, i):
           row.append(triangle[i - 1][j] + triangle[i - 1][j - 1])
       row.append(1)
       triangle.append(row)
   for num in triangle[k]:
       if is_prime(sum_of_digits(num)) or sum_of_digits(num) == 1:
           fabulous_numbers.add(num)
   return sorted(fabulous_numbers)

def main():

   with open("vuliin.txt", "r") as file_in, open("vuliout.txt", "w") as file_out:
       k = int(file_in.readline().strip())
       fabulous_numbers = generate_fabulous_numbers(k)
       if fabulous_numbers:
           file_out.write(" ".join(map(str, fabulous_numbers)))
       else:
           file_out.write("Nu au fost respectate cerintele impuse.")

if __name__ == "__main__":

   main()

</syntaxhighlight>