Cerința
Se dau numerele naturale a, b, c și d cu proprietatea că a < b < c < d. Să se determine câte numere naturale divizibile cu 3 sunt în reuniunea de intervale [a,b] ∪ [c,d].
Date de intrare
Programul citește de la tastatură numerele naturale a, b, c, d.
Date de ieșire
Programul va afișa pe ecran numărul de numere naturale divizibile cu 3 din [a,b] ∪ [c,d].
Restricții și precizări
2 ≤ a < b < c < d ≤ 2.000.000.000
Exemplu
Intrare
2 7 10 18
Ieșire
5
Explicație
Cele 5 numere naturale divizibile cu 3 din [2,7] ∪ [10,18] sunt 3, 6, 12, 15 și 18.
Salut! Va rog mult sa ma ajutati la aceasta problema. Nu reusesc sa o fac. Este problema #3928 de pe pbinfo!
Răspunsuri la întrebare
Salut!
Ai rezolvarea in C++ mai jos
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, s1 = 0, s2 = 0;
cin >> a >> b >> c >> d;
s1 = b / 3 - (a - 1) / 3;
s2 = d / 3 - (c - 1) / 3;
cout << s1 + s2;
return 0;
}
- Explicatie:
Iterand de la a la b si de la c la d calculand numerele nu ne va intra in limita de timp, asadar folosim un algoritm eficient care suna cam asa:
Fie:
A = a * 3
B = b * 3
Numarul de numere divizibile cu 3 intre a si b va fi egal cu b - a
Exemplu:
A = 10
B = 70
atunci a = 3 si b = 23
Asadar numarul de numere divizibile cu 3 vor fi: 23 - 3 = 20
Explicație:
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
cout << b / 3 - ( a - 1 ) / 3 + d / 3 - ( c - 1 ) / 3;
return 0;
}
o amărâtă de formula pe care n-ai cum sa o știi dinainte...