661 - Triunghiuri1

From Bitnami MediaWiki

Cerinţa[edit]

Se dau n numere naturale distincte. Determinaţi câte triunghiuri distincte pot avea lungimile laturilor printre aceste numere.

Date de intrare[edit]

Programul citește de la tastatură numărul n, iar apoi cele n numere naturale.

Date de ieșire[edit]

Programul va afișa pe ecran numărul C, reprezentând numărul de triunghiuri determinate.

Restricţii şi precizări[edit]

  • 1 ⩽ n ⩽ 1000
  • cele n numere citite vor fi mai mici decât 1.000.000

Exemplul 1[edit]

Intrare
5
3 5 10 7 6 
Iesire
Datele de intrare corespund restrictiilor impuse
7

Exemplul 2[edit]

Intrare
3
1 2 1000000000
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit]

<syntaxhighlight lang="python" line> def numar_triunghiuri(n_val, numere_val):

   numere_val.sort()
   count = 0
   for i in range(n_val-2):
       k = i + 2
       for j in range(i+1, n_val):
           while k < n_val and numere_val[i] + numere_val[j] > numere_val[k]:
               k += 1
           if k > j:
               count += k - j - 1
   return count


def verifica_restrictii(n_val, numere_val):

   if n_val < 1 or n_val > 1000:
       return "Datele de intrare nu corespund restrictiilor impuse"
   for numar in numere_val:
       if numar >= 1000000:
           return "Datele de intrare nu corespund restrictiilor impuse"
   return "Datele de intrare corespund restrictiilor impuse"


n = int(input()) numere = list(map(int, input().split())) print(verifica_restrictii(n, numere)) print(numar_triunghiuri(n, numere)) </syntaxhighlight>

Explicație[edit]

Cele 7 triunghiuri au lungimile laturilor:

3 5 7
3 5 6
3 7 6
5 7 6
5 10 7
5 10 6
10 7 6