3367 - Croseta

From Bitnami MediaWiki

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>

  1. 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
  1. 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>