Informatică, întrebare adresată de Junko912, 8 ani în urmă

#1539 pbinfo
Cerința
Scrieţi în limbajul C/C++ definiţia completă a subprogramului apartenenta, care primeşte ca argument un număr natural nenul n şi returnează valoarea 1 dacă n aparţine mulţimii H={2^x⋅3^y⋅5^z | x,y,z∈N}, respectiv 0 în caz contrar.

Restricții și precizări
1 ≤ n ≤ 109
Exemple
apartenenta(180) = 1
apartenenta(385) = 0

Notă
Puteţi defini şi alte subprograme care vă ajută să rezolvaţi mai uşor problema.

Răspunsuri la întrebare

Răspuns de andrei750238
1

#include <math.h>

using namespace std;

int aparenta(int n) {

int x, y, z;

for (x = 0; x < 10; x++) {

 for (y = 0; y < 10; y++) {

  for (z = 0; z < 10; z++) {

   if (pow(2, x)*pow(3, y)*pow(5, z) == n) return 1;

  }

 }

}

return 0;

}


andrei750238: Nota : Daca nu putem folosi math.h, vom face o functie care va calcula puterea.
pmarian98: int apartenenta(int n)
{
while(n%2==0)
{
n/=2;
}
while(n%3==0)
{
n/=3;
}
while(n%5==0)
{
n/=5;
}
if(n==1)
return 1;
return 0;
}
pmarian98: idea mea de 100%
boiustef: frumos !
boiustef: pow se recomanda a fi folosit numai la puteri cu exponent real ...
boiustef: si a fost anume asa definita ac functie
Răspuns de pmarian98
1

int apartenenta(int n)

{

while(n%2==0)

{  

n/=2;

}

while(n%3==0)

{

n/=3;

}

while(n%5==0)

{

n/=5;

}

if(n==1)

return 1;

return 0;

}



pmarian98: mai am si idea aceasta
pmarian98: int apartenenta(int x) {
int v[] = {2, 3, 5};
for(size_t i = 0; i < 3; i++)
while(x% v[i] == 0)
x/= v[i];
return (x== 1);
}
pmarian98: size_t
pmarian98: e un fel de a memora aceasta variabila i
pmarian98: "un fel"
Alte întrebări interesante