Problema egale #1923 de pe pbinfo in c++.
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) 1 <= a <= b <= 1017
2) 1<=x<=100 Pentru 20% din punctaj avem T = 1 şi 1 <= a, b <= 104
3) Pentru încă 20% din punctaj avem T = 1 şi 108 <= a, b <= 109
4) Pentru încă 10% din punctaj avem T = 1 şi a, b > 109
5) 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
0
Ai aici solutia oficiala. Succes!
#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;
}
#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
Matematică,
8 ani în urmă
Evaluare Națională: Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă