Informatică, întrebare adresată de stefy24, 9 ani în urmă

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

Răspunsuri la întrebare

Răspuns de ap53
7
#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;
}
Alte întrebări interesante