0958 - Povesti: Difference between revisions

From Bitnami MediaWiki
Pop Giulia (talk | contribs)
Pagină nouă: ==Enunt== Rareș și Didi au primit în dar o carte rară de povești, cu N+1 pagini numerotate cu numerele distincte: 0, 1, 2, 3,…, N. De ce rară? Din două motive: Este necesar un cifru pentru a deschide cartea. Acest cifru este un număr C egal cu numărul de cifre folosite pentru numerotarea celor N+1 pagini ale cărții. În carte există o pagină magică. Dacă este descoperită, atunci toate poveștile din carte vor fi înlocuite instantaneu cu altele necunoscute....
 
Pop Giulia (talk | contribs)
Line 46: Line 46:
Paginile cărții sunt numerotate cu numerele: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…, 21035. Cifrul este numărul C=94070 deoarece s-au folosit 94070 cifre pentru scrierea numerelor paginilor cărții.
Paginile cărții sunt numerotate cu numerele: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…, 21035. Cifrul este numărul C=94070 deoarece s-au folosit 94070 cifre pentru scrierea numerelor paginilor cărții.
==Solutie==
==Solutie==
<syntaxhighlight lang="python" line>
# citirea datelor de intrare
# citirea datelor de intrare
N = int(input())
N = int(input())
Line 68: Line 69:
# afisarea rezultatelor
# afisarea rezultatelor
print(magic_page, C)
print(magic_page, C)
</syntaxhighlight>

Revision as of 10:31, 30 April 2023

Enunt

Rareș și Didi au primit în dar o carte rară de povești, cu N+1 pagini numerotate cu numerele distincte: 0, 1, 2, 3,…, N. De ce rară? Din două motive:

Este necesar un cifru pentru a deschide cartea. Acest cifru este un număr C egal cu numărul de cifre folosite pentru numerotarea celor N+1 pagini ale cărții. În carte există o pagină magică. Dacă este descoperită, atunci toate poveștile din carte vor fi înlocuite instantaneu cu altele necunoscute. Pentru a descoperi numărul P al paginii magice se pornește de la numărul N din care se va alege o cifră (diferită de prima și ultima cifră ale lui N), astfel încât produsul dintre prefixul lui N (reprezentând numărul format din cifrele situate la stânga cifrei alese) și sufixul lui N (reprezentând numărul format din cifrele situate la dreapta cifrei alese) să fie maxim. Numărul paginii magice va fi egal cu acest produs maxim. De exemplu, pentru N=21035 se pot obține produsele: 210*5=1050, 21*35=735, 2*35=70. Astfel numărul paginii magice este 1050.

Pasionați de povești, Rareș dorește să descopere pagina magică iar Didi și-a propus să descopere cifrul pentru deschiderea cărții.

Cerinţe

Scrieţi un program care citeşte numărul natural nenul N şi care determină: a) numărul P al paginii magice; b) numărul C reprezentând cifrul de deschidere a cărții.

Date de intrare

Programul citește de la tastatură numărul N, reprezentând numărul de pagini ale cărții de povești.

Date de ieșire

Programul va afișa pe ecran numere P C, n această ordine, cu semnificația din enunț.

Restricții și precizări

100 ≤ N ≤ 1000000000; N număr natural Pentru rezolvarea corectă a cerinţei a) se acordă 20% din punctaj, iar pentru rezolvarea corectă a ambelor cerinţe se acordă 100% din punctaj.

Exemplu 1

Intrare

113 Ieșire

3 232

Explicație=

Numărul paginii magice este 3.

Paginile cărții sunt numerotate cu numerele: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…, 113. Cifrul este numărul C=232 deoarece s-au folosit 232 cifre pentru scrierea numerelor paginilor cărții.

Exemplu 2

Intrare

21035 Ieșire

1050 94070

Explicație

Numărul paginii magice este 1050.

Paginile cărții sunt numerotate cu numerele: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…, 21035. Cifrul este numărul C=94070 deoarece s-au folosit 94070 cifre pentru scrierea numerelor paginilor cărții.

Solutie

<syntaxhighlight lang="python" line>

  1. citirea datelor de intrare

N = int(input())

  1. initializarea variabilelor pentru pagina magica

max_prod = 0 magic_page = 0

  1. gasirea paginii magice

for i in range(1, len(str(N))-1):

   prefix = int(str(N)[:i])
   cifra = int(str(N)[i])
   sufix = int(str(N)[i+1:])
   produs = prefix * sufix
   if produs > max_prod:
       max_prod = produs
       magic_page = produs
  1. gasirea cifrei de deschidere

C = sum(len(str(i)) for i in range(N+1))

  1. afisarea rezultatelor

print(magic_page, C) </syntaxhighlight>