3367 - Croseta
Enunt[edit | edit source]
Ionel este un băieţel pasionat de matematică, dar tare năzdrăvan. Într-o zi a dat cu o piatră şi a spart un geam de la casa bunicii. Ştiind pasiunea băiatului, bunica i-a spus: ”Te voi ierta dacă îmi dai răspunsul corect la următoarea problemă: Când erai mic am croşetat o “păturică specială” pentru tine. Nu îmi pot aminti cu câte ochiuri am pornit primul rând şi doresc tare mult să ştiu acest lucru. Te rog să mă ajuți! Pot să-ți spun că:
- păturica are n ochiuri;
- primele două rânduri croșetate au același număr de ochiuri. Ele se găsesc la mijlocul păturii și conțin cele mai multe ochiuri;
- pentru a obține rânduri noi am procedat astfel: pornind din partea stângă a fiecărui rând, către dreapta, am unit câte 3 ochiuri din rândul precedent întrunul singur, obținând astfel un rând nou. Dacă la capătul din dreapta rândului rămâneau 4 sau 5 ochiuri, din acestea formam un singur ochi. Pornind de la rândul 1, fiecare nou rând obținut se găsește deasupra celui din care a fost format, iar fiecare nou rând obținut pornind de la rândul 2 se găsește sub cel din care a fost format;
- am continuat până când am ajuns la un rând cu un singur ochi;
- în timp ce lucram, m-am gândit pe parcurs, dacă penultimul rând conţinea două ochiuri, să formez cu ele un singur ochi.”
Ionel a desenat cum arată “păturica specială” cu 20 de ochiuri şi vă roagă să-l ajutaţi să găsească soluţia problemei.
Cerința[edit | edit source]
Se dă un număr n, natural par, reprezentând numărul total de ochiuri din care este formată păturica. Se cere să se determine un număr natural k care reprezintă numărul de ochiuri pe care îl are primul rând croşetat de bunica.
Date de intrare[edit | edit source]
Fișierul de intrare crosetain.txt conține pe prima linie numărul n, cu semnificația din enunț.
Date de ieșire[edit | edit source]
Fișierul de ieșire crosetaout.txt va conține pe prima linie numărul k, va conţine un număr natural reprezentând numărul de ochiuri existente pe primul rând croşetat de bunica.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 2 000 000 000
- n număr natural par
- Pentru toate testele date există soluţie.
- Un ochi de croşetă este desenat printr-un cerculeţ.
Exemplu 1[edit | edit source]
- crosetain.txt
- 30
- crosetaout.txt
- 11
Explicatie[edit | edit source]
Primul şi al doilea rând au câte 11 ochiuri. De o parte și de cealaltă, următoarele două rânduri au fiecare câte 3 ochiuri. Următoarele două rânduri sunt ultimele și au fiecare câte un 1 ochi.
Exemplu 2[edit | edit source]
- crosetain.txt
- 0
- crosetaout.txt
- Nu au fost respectate cerintele impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3367 - Croseta
def gaseste_numar_ochiuri_primul_rand(n):
# Daca n este 0, afisam mesajul corespunzator si ne oprim if n == 0: return "Nu au fost respectate cerintele impuse"
# Initializam variabilele necesare ochiuri_primul_rand = n // 2 - 4
# Returnam rezultatul return ochiuri_primul_rand
- Citirea datelor de intrare
try:
with open('crosetain.txt', 'r') as f: n = int(f.readline().strip())
# Verificam daca n este par if n % 2 == 0: # Determinam rezultatul rezultat = gaseste_numar_ochiuri_primul_rand(n)
# Scriem rezultatul in fisierul de iesire with open('crosetaout.txt', 'w') as g: g.write(str(rezultat)) else: # Daca n nu este par, afisam mesajul corespunzator with open('crosetaout.txt', 'w') as g: g.write("Nu au fost respectate cerintele impuse")
except Exception as e:
print("A aparut o eroare:", str(e))
</syntaxhighlight>