1443 - Control 2
Gigel a primit spre păstrare un set de n
cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra 1
, altfel îl notează cu cifra 0
. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori 1
şi cifra unităţilor egală cu numărul de valori 0
, obţinându-se astfel „numărul de control”.
Cerința
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.
Date de intrare
Pe prima linie a fişierului de intrare control2.in
se găseşte numărul natural n
, iar pe următoarele n
linii câte un număr natural, reprezentând greutăţile celor n
cutii.
Date de ieșire
Fişierul control2.out
va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea 0
sau 1
. Pe linia a doua se va afişa 1
dacă numărul este prim, respectiv 0
în caz contrar.
Restricții și precizări
1 ≤ n ≤ 100
- fiecare greutate este un număr natural, mai mic sau egal cu
200
Exemplu:
control2.in
21 1 3 2 6 2 6 2 8 9 8 8 9 10 8 11 18 11 12 14 15 17
control2.out
31 1
Explicație
După ordonare se obţine şirul: 1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18
Se obţine apoi
.
Din valorile 1 1 0 1
se obţine numărul de control 31, care este număr prim.
Încărcare soluție
Lipește codul aici
<syntaxhighlight lang="python" line="1"> import sys
def main():
sys.stdin = open('control2.in', 'r')
sys.stdout = open('control2.out', 'w')
numarGreutati = int(input()) greutati = list(map(int, input().split())) greutati.sort()
aparitii = [] numarApariti = 0 numarControl = 0 elementeSumaControl = [0, 0] estePrim = 1
i = 0 while i < numarGreutati:
count = 1 if greutati[i] == greutati[i+1]: while greutati[i] == greutati[i+1] and i < numarGreutati: count += 1 i += 1 aparitii.append(count) numarApariti += 1 i += 1
for i in range(0, numarApariti // 3 * 3, 3):
elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 and aparitii[i] % 2 == aparitii[i + 2] % 2] += 1
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10
if numarControl % 2 == 0:
estePrim = (numarControl == 2)
else:
for d in range(3, int(numarControl ** 0.5) + 1, 2): if numarControl % d == 0: estePrim = 0 break
print(numarControl, file=sys.stdout) print(estePrim, file=sys.stdout)
if __main__ == '__name__':
main()
</syntaxhighlight>