👤
Uionutalin
a fost răspuns

Program C++ - doresc rezolvarea problemei, dar nu in fisiere.

Fisierul text Numere.txt contine pe prima linie doua numere naturale: n (0<n<100) si k (0<k<15) si pe urmatorul rand n numere naturale, numerele de pe acelasi rand fiind separate prin cate un spatiu.
a) Verificati daca cifrele primului numar scris pe a doua linie in fisierul Numere.txt au aceeasi paritate (toate pare sau toate impare) si afisati pe ecran un mesaj corespunzator (DA sau NU).
b) Scrieti un program care afiseaza in fisierul de iesire Numere.out, in ordine crescatoare, separate de cate un spatiu, acele numere din fisierul Numere.txt care au cel putin k divizori proprii. Daca un numar care corespunde cerintei apare de mai multe ori, se va afisa o singura data.

Exemplu: daca fisierul Numere.txt are urmatorul continut:
9   4
15   36   24   33   36   1   12   1   2

fisierul Numere.out va contine:
12   24   36

Pe ecran se va afisa DA (deoarece 1 si 5 sunt de aceeasi paritate).


Răspuns :

#include <iostream>
#include <fstream>
using namespace std;

int nrDiv(int nr)
{
int nrDiv = 0;
for(int i = 2; i < nr - 1; i++)
{
if(nr % i == 0)
nrDiv++;
}
return nrDiv;
}

int maiMicDecat(int i, int j[])
{
int idx = 0;
for(int k = 0; k < sizeOf(j); k++){
if(j[k] > i)
return k;
}
return -1;
}

int main(int argc, char** argv)
{
ifstream in("Numere.txt");
int n, k;
in >> n >> k;
int nr[n];
bool scrie = true;
int rem;
for(int i = 0; i < n; i++)
{
in >> nr[i];
int r = nr[i] % 2;
if(i == 0)
rem = r;
else{
scrie = rem == r && scrie;
}
if(nrDiv(nr[i]) < k)
nr[i] = -1;
else
for(int j = 0; j < i; j++){
if(nr[i] == nr[j])
nr[i] = -1;
}
}
if(scrie)
cout << "DA";
in.close();
int numereSortate[n];
int ptr = 0;
for(int i = 0; i < n;i++){
if(nr[i] != -1)
{
if(numereSortate[0] > nr[i])
{
for(int j = n-1; j > 0; j--){
numereSortate[j] = numereSortate[j-1];
}
numereSortate[0] = nr[i];
ptr++;
}
else if(numereSortate[ptr-1] < nr[i]){
numereSortate[ptr] = nr[i];
ptr++;
}
else{
int idx = maiMicDecat(nr[i], numereSortate);
for(int j = n-1; j > idx; j--){
numereSortate[j] = numereSortate[j-1];
}
numereSortate[idx] = nr[i];
ptr++;
}
}
}
for(int i = 0; i < ptr; i++){
cout << numereSortate[i] << " ";
}
}