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

Cine stie cum sa rezolve problemele in c++?
Tehnica Trierii

1)Elaborati un program care determina cate puncte cu coordonate intregi se contin Intr-o sfera de raza R cu centrul in originea sistemului de coordonate.
Se considera ca R este un numar natural, 1=R=30. Distanta d dintre un punct cu coordonatele (x, y, z) si originea sistemului de coordonate se determina dupa formula: d=v(x^2+y^2+z^2 ).

Tehnica Greedy

1)Suma componentelor prime. Fie A o variabila indexata, ale carei componente A(1), A(2),..., A(n) sunt numere naturale nenule.
Sa se determine suma componentelor care sunt numere prime. Atunci cand un numar prim se repeta, el va fi luat in consideratie o singura data.

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

***************************** Triere **************************

#include <iostream>

using namespace std;

struct punct

{

   int x,y,z;

}P;

int n,i,k,R;

int Distanta(punct P)

{

   return P.x*P.x+P.y*P.y+P.z*P.z;

}

bool SolutiePosibila(punct P)

{

   if (Distanta(P)<=R*R) return true;

   else return false;

}

void PrelucrareaSolutiei(int &k)

{

   ++k;

}

int main()

{

   cout << "Introdu raza sferei, R= "; cin >> R;

   cout << "nr. de puncte, n= "; cin >> n;

   cout << "Introduceti coordonatele x,y,z a " << n << " puncte \n";

   for (i=1; i<=n; ++i)

   {

       cout << "pentru punctul " << i << " : ";

       cin >> P.x >> P.y >> P.z;

       if (SolutiePosibila(P))

           PrelucrareaSolutiei(k);

   }

   cout << "In sfera se contin " << k << " puncte";

   return 0;

}

Explicație:

************************ Greedy ***********************

#include <iostream>

using namespace std;

int n, A[100], B[100], m,x,i;

bool prim(int num)

{

   if (num<2) return false;

   if (num==2) return true;

   if (num>2)

   {

       if (num%2==0) return false;

       for (int d=3; d*d<=num; d+=2)

           if (num%d==0) { return false; }

       return true;

   }

}

bool nuSeRepeta(int num)

{

   int i;

   bool nurepeta=true;

   for (i=0; i<m; ++i)

   if (num==B[i]) { nurepeta=false; break; }

   return nurepeta;

}

bool ExistaElemente()

{

   int i;

   bool exista=false;

   for (i=0; i<n; ++i)

       if (prim(A[i]) && nuSeRepeta(A[i])) exista=true;

   return exista;

}

void AlegeUnElement(int &x)

{

   int i=0;

   while (!(prim(A[i]) && nuSeRepeta(A[i]))) ++i;

   x=A[i]; A[i]=0;

}

void IncludeElementul(int x, int &m)

{

   B[m++]=x;

}

int main()

{

   cout << "n= "; cin >> n;

   cout << "introdu " << n << " numere naturale \n";

   for (i=0; i<n; ++i)

       cin >> A[i];

   while (ExistaElemente())

   {

       AlegeUnElement(x);

       IncludeElementul(x,m);

   }

   int suma=0;

   for (i=0; i<m; ++i)

       suma+=B[i];

   cout << "Suma primelor= " << suma;

   return 0;

}

Alte întrebări interesante