Rezolvare completă PbInfo #958 Povesti

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Povesti:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    long long n , pp = 9 , i , n2 , t = 0 , c = 0;
    cin >> n;
    //cerinta a
    long long prodmax=0, p;
    int p10 = 100 , prefix , sufix;
    do
    {
        prefix = n / p10;
        sufix = n % (p10 / 10);
        p = prefix * sufix;
        prodmax = max(p , prodmax);
        p10 = p10 * 10;
    }
    while( prefix > 9);
    cout << prodmax << " ";

    //cerinta b
    n2 = n;
    while (n2 != 0)
    {
        c = c + 1;
        n2 = n2 / 10;
    }
    for (i = 1; i < c; i++)
    {
        t = t + i * pp; pp = pp * 10;
    }
    pp = pp / 9;
    t = t + (n - pp + 1) * c;

    cout << t+1 << endl;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #958 Povesti

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #958 Povesti de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!