Rezolvare completă PbInfo #2283 Caraghios

Se consideră un șir S de cifre nenule. O secvență a șirului S este o succesiune de cifre din S care apar pe poziții consecutive. Un număr n asociat unei secvențe din S este numărul în baza 10 care se formează cu toate cifrele din secvența respectivă, în ordinea în care apar în aceasta.

Un număr n se numește caraghios dacă este egal cu pătratul sumei cifrelor lui n.

Cerința

Dându-se un șir S de cifre nenule, să se determine câte dintre secvențele din S au numere asociate caraghioase.

Date de intrare

Fișierul de intrare caraghios.in conține pe prima linie șirul S de cifre nenule.

Date de ieșire

Fișierul de ieșire caraghios.out va conține pe prima linie numărul de secvențe din S care au asociate numere caraghioase.

Restricții și precizări

  • Șirul S va conține maxim 1.000.000 de cifre

Exemplu

caraghios.in

28113

caraghios.out

3

Explicație

Toate secvențele lui S sunt: 2, 28, 281, 2811, 28113, 8, 81, 811, 8113, 1, 11, 113, 1, 13, 3
Există 3 secvențe care au asociate numere caraghioase: 81, 1, 1
81 = (8+1)*(8+1), 1 = 1*1, 1 = 1*1

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 Caraghios:

//100 p
#include "fstream"

std::ifstream cin("caraghios.in");
std::ofstream cout("caraghios.out");

int nr;
int main(){
    char x, y;
    cin >> x;
    if(x == '1')
        ++ nr;
    for(;cin >> y;){
        if(y == '1'){
            ++ nr;
            if(x == '8')
                ++ nr;
        }
        x = y;
    }
    cout<<nr;
}

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 #2283 Caraghios

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2283 Caraghios 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!