Rezolvare completă PbInfo #1923 egale

Cerința

Afişaţi, în ordine crescătoare, toate numerele dintr-un anumit interval care au toate cifrele egale.
Sunt două tipuri de cerinţe:
1. se dau a şi b si se cer toate numerele din intervalul a, b (inclusiv, eventual, capetele).
2. Se da x si se cer toate numerele cu maxim x cifre.

Date de intrare

Din fişierul egale.in se citeşte mai întâi un număr T. Dacă T este 1 pe a doua linie sunt două numere a şi b, separate prin spaţiu. Dacă T este 2, pe a doua linie va fi numărul x.

Date de ieșire

In fişierul egale.out se scriu, pe un rând numerele cerute separate prin câte un spaţiu.

Restricții și precizări

  • 1 <= a <= b <= 1017
  • 1<=x<=100
  • Pentru 20% din punctaj avem T = 1 şi 1 <= a, b <= 104
  • Pentru încă 20% din punctaj avem T = 1 şi 108 <= a, b <= 109
  • Pentru încă 10% din punctaj avem T = 1 şi a, b > 109
  • Pentru 50% din punctaj avem T=2

Exemplu

egale.in

1
8 30

egale.out

8 9 11 22

egale.in

2
2

egale.out

1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99

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

#include <fstream>
#include <cassert>

using namespace std;

int main() {
    ifstream fin("egale.in");
    ofstream fout("egale.out");

    int op;
    fin >> op;
    assert(op == 1 || op == 2);

    if (op == 1) {
        long long a, b;
        fin >> a >> b;

        assert(a <= b);
        //assert(a <= 100000000000000000LL && b <= 100000000000000000LL && a > 1000000000 && b > 1000000000);

        long long curr = 1;
        while (curr <= b) {
            for (int i = 1; i <= 9; ++i)
                if (a <= i*curr && i*curr <= b)
                    fout << i*curr << " ";
            curr = curr*10 + 1;
        }
        fout << "\n";
    }
    else {
        int x;
        fin >> x;
        assert(x <= 100);

        for (int nrCif = 1; nrCif <= x; ++nrCif) {
            for (int cif = 1; cif <= 9; ++cif) {
                for (int i = 1; i <= nrCif; ++i)
                    fout << cif;
                fout << " ";
            }
        }

        fout << "\n";
    }

    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 #1923 egale

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