Clasa a IX-a · Frecvență, sume parțiale și ciurul lui EratosteneRead in English
Cifrele comune a două numere în C++
În engleză: Common digits of two numbers
Ideea
Marcăm în doi vectori de 10 poziții ce cifre apar în fiecare număr (aparA[c], aparB[c]). Cifrele comune sunt cele marcate în ambii vectori; le afișăm crescător sau NU dacă nu există.
Descrierea în engleză
In two arrays of 10 positions we mark which digits appear in each number (aparA[c], aparB[c]). The common digits are the ones marked in both arrays; we print them in increasing order, or NO if there are none.
- Complexitate
- O(ka + kb), unde ka, kb sunt numerele de cifre
- Clasa
- Clasa a IX-a (Grade 9)
Exemple
Intrare
72413 3017
Ieșire așteptată
1 3 7
Intrare
222 135
Ieșire așteptată
NU
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Cifrele comune a două numere
* Clasa: 9
* Capitol: Frecvență, sume parțiale și ciurul lui Eratostene
* Descriere: Marcăm în doi vectori de 10 poziții ce cifre apar în fiecare
* număr (aparA[c], aparB[c]). Cifrele comune sunt cele marcate în
* ambii vectori; le afișăm crescător sau NU dacă nu există.
* Complexitate: O(ka + kb), unde ka, kb sunt numerele de cifre
*
* Exemplu
* Intrare: 72413 3017
* Ieșire: 1 3 7
*
* Exemplu
* Intrare: 222 135
* Ieșire: NU
*/
#include <iostream>
using namespace std;
int main()
{
long long a, b;
bool aparA[10] = {false}, aparB[10] = {false};
cin >> a >> b;
do
{
aparA[a % 10] = true;
a = a / 10;
}
while (a > 0);
do
{
aparB[b % 10] = true;
b = b / 10;
}
while (b > 0);
bool exista = false;
for (int c = 0; c <= 9; c++)
{
if (aparA[c] && aparB[c])
{
cout << c << ' ';
exista = true;
}
}
if (!exista)
{
cout << "NU";
}
cout << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.