Primesc doar 80 de puncte la aceasta problema. Acesta este codul pe care l-am folost int multipli(int a,int b,int c)
{
int nr=0;
for(int i=a;i<=b;i++)
{
if(i%c==0)
nr++;
}
return nr;
}
Ce este gresit?
[FMultiplu]
Cerinţa
Scrieți definiția completă a subprogramului multipli, cu trei parametri a , b , c (a≤b), numere naturale, ce returnează numărul multiplilor lui c din intervalul [a;b].
Restricţii şi precizări
numele funcției va fi multipli
funcția va avea 3 parametri, în această ordine: a, b, c.
1 ≤ a , b , c ≤ 1.000.000.000
Exemplu
Pentru a=10, b=27, c=5 subprogramul returnează valoarea 4.
Răspunsuri la întrebare
Răspuns de
9
Nu are sens parcurgerea tuturor numerelor de la a la b, findca daca x e multiplu pentru y atunci urmatorul multiplu al lui y va fi x+y
deci va fi o varianta mai optimizata de a scri functia astfel
int multipli(int a, int b, int c)
{
int i,nr=0;
for (i=a; i<=b; )
if (i % c !=0) i++; else break;
for (int j=i; j<=b; j+=c)
nr++;
return nr;
}
De asemenea, se poate de atras atentia ca nr de multipli e proportional cu diferenta dintre limita de dreapta a intervalului si cea de stanga
de unde obtinem formula pentru numarul de multipli (il voi nota cu nr) e
nr=(b-a)/c
insa sunt unele exceptii daca unul sau ambele capete ale intervalului il devid pe c, raspunsul corect va fi cu 1 mai mult
deci obtinem functia
int multipli(int a, int b, int c)
{
int nr=b/c-a/c;
if (b % c == 0 || a % c == 0) nr ++;
return nr;
}
Mai sus scriam ca formula trebuie sa fie (a-b)/c, insa in functie am folosit b/c-a/c, cred ca e magie sau eu m-am gresit la calcule, am dat functiei mai multe teste, nu am gasit nici un raspuns gresit
deci va fi o varianta mai optimizata de a scri functia astfel
int multipli(int a, int b, int c)
{
int i,nr=0;
for (i=a; i<=b; )
if (i % c !=0) i++; else break;
for (int j=i; j<=b; j+=c)
nr++;
return nr;
}
De asemenea, se poate de atras atentia ca nr de multipli e proportional cu diferenta dintre limita de dreapta a intervalului si cea de stanga
de unde obtinem formula pentru numarul de multipli (il voi nota cu nr) e
nr=(b-a)/c
insa sunt unele exceptii daca unul sau ambele capete ale intervalului il devid pe c, raspunsul corect va fi cu 1 mai mult
deci obtinem functia
int multipli(int a, int b, int c)
{
int nr=b/c-a/c;
if (b % c == 0 || a % c == 0) nr ++;
return nr;
}
Mai sus scriam ca formula trebuie sa fie (a-b)/c, insa in functie am folosit b/c-a/c, cred ca e magie sau eu m-am gresit la calcule, am dat functiei mai multe teste, nu am gasit nici un raspuns gresit
spamhack009:
Acum doar 90 de puncte. Tot nu pot intelege ce nu merge bine.
Răspuns de
27
int multipli(int a, int b, int c)
{
int nr = b / c - a / c;
if(a % c == 0) nr ++;
return nr;
}
{
int nr = b / c - a / c;
if(a % c == 0) nr ++;
return nr;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Germana,
9 ani în urmă
Limba română,
9 ani în urmă