Cerința
Pentru un număr natural x
mai mare decât 1
numim redusul lui x
cel mai mic număr natural care are exact aceiași divizori primi ca și x
.
Se dă un tablou cu n
elemente, numere naturale mai mari decât 1
. Să se înlocuiască fiecare element din tablou cu redusul său și apoi să afișeze elementele din tabloului ordonate descrescător.
Se vor defini și apela următoarele subprograme:
citire
, care citește de la tastatură valoarea luin
și celen
elemente ale tablouluiafisare
, care afișează pe ecran elementele tabloului, separate prin exact un spațiuredus
, care determină pentru un număr dat redusul săusortare
, care sortează descrescător un tablouinloc
, care realizează înlocuirile cerute.
În programele C/C++ nu se vor folosi variabile globale.
Date de intrare
Se citește de la tastatură numărul n
, iar apoi cele n
elemente ale tabloului.
Date de ieșire
Se vor afișa pe ecran elementele tabloului după transformările cerute, separate prin exact un spațiu.
Restricții și precizări
1 ≤ n ≤ 1000
- elementele tabloului vor fi mai mici decât
1.000.000.000
Exemplu
Intrare
7 7 18 18 5 14 20 4
Ieșire
14 10 7 6 6 5 2
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Inlocuire4:
#include <iostream>
#include <cassert>
using namespace std;
void citire(int a[], int &n);
void afisare(int a[], int n);
void inloc(int a[], int n);
int redus(int n);
void sortare(int a[], int n);
int main()
{
int n , v[1005];
citire(v , n);
inloc(v , n);
sortare(v , n);
afisare(v , n);
return 0;
}
void citire(int a[] , int & n)
{
cin >> n;
for(int i = 0 ; i < n ; i ++)
{
assert(cin >> a[i]);
assert(a[i] > 1);
}
}
void afisare(int a[], int n)
{
for(int i = 0 ; i < n ; i ++)
cout << a[i] << " ";
}
void inloc(int a[], int n)
{
for(int i = 0 ; i < n ; i ++)
a[i] = redus(a[i]);
}
int redus(int n)
{
int d = 2, r = 1;
while(n > 1)
{
if(n % d ==0)
{
r *= d;
while(n % d == 0)
n /= d;
}
d ++;
if(d * d > n)
d = n;
}
return r;
}
void sortare(int a[], int n)
{
for(int i = 0 ; i < n - 1 ; i ++)
for(int j = i + 1 ; j < n ; j ++)
if(a[i] < a[j])
{
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1828 Inlocuire4
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1828 Inlocuire4 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!