0960 - Termen k in sir

From Bitnami MediaWiki
Revision as of 19:31, 14 March 2023 by Adina Timiș (talk | contribs) (Pagină nouă: ==Cerința== La testul de selecție la Centrul de Excelentă în Informatică din acest an, prima problemă ne cere să studiem un șir S de numere naturale nenule ai cărui primi termeni sunt: 1, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 2, 3... să deducem regula prin care a fost construit și apoi să descoperim cel de-al k-lea termen al șirului S. Scrieţi un program care să determine cel de-al k-lea termen al șirului S....)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

La testul de selecție la Centrul de Excelentă în Informatică din acest an, prima problemă ne cere să studiem un șir S de numere naturale nenule ai cărui primi termeni sunt: 1, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 2, 3... să deducem regula prin care a fost construit și apoi să descoperim cel de-al k-lea termen al șirului S. Scrieţi un program care să determine cel de-al k-lea termen al șirului S.

Date de intrare

Programul citește de la tastatură numărul natural nenul k.

Date de ieșire

Programul va afișa pe ecran un număr natural reprezentând cel de-al K-lea termen al șirului S.

Restricții și precizări

  • 1 ≤ K ≤ 2000000000, număr natural
  • termenii șirului sunt numere naturale nenule strict mai mici decât 30000

Exemplul 1

Intrare
20
Ieșire
2

Exemplul 2

Intrare
0
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 0960 - Termen k in sir

def k_termen(k):

   lungime_sectiune = 1
   sectiune_inceput = 1
   sectiune_maxima = 1
   while k > lungime_sectiune:
       k -= lungime_sectiune
       lungime_sectiune += 2
       sectiune_inceput += lungime_sectiune // 2
       sectiune_maxima += 1
   pozitie_k = k - 1
   if pozitie_k <= sectiune_maxima:
       return sectiune_maxima - pozitie_k
   else:
       return pozitie_k - sectiune_maxima + 2

def main():

   k = int(input("Introduceti valoarea lui k: "))
   if 1 <= k <= 2000000000:
       termen = k_termen(k)
       print("Datele de intrare corespund restricțiilor impuse.")
       print(f"Termenul {k}-lea din sir este: {termen}")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

if __name__ == "__main__":

   main()
  

</syntaxhighlight>