Informatică, întrebare adresată de byankabya99, 9 ani în urmă

Cerința
Se dă un vector cu n elemente, numere naturale. Afișați în ordine crescătoare valorile prime din vector.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire
Programul va afișa pe ecran valorile prime din vector, în ordine crescătoare, separate prin exact un spațiu.

Restricții și precizări
1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000.000

Răspunsuri la întrebare

Răspuns de artur99
5
+Pasii:
1. Parcurgi vectorul si verifici fiecare element daca este prim
2. In cazul in care este prim, il rescrii in vectorul x
3. Sortezi apoi afisezi vectorul x;

(citire vector v, de n elemente - for(i=0;i<n;i++))
(initializam un k=0, si un vector x de n elemente)
//Parcurgem vectorul
for(i=0;i<n;i++){
    divizori=0;
    for(j=2;j<=v[i]/2;j++){
        if(v[i]%j==0)
            divizori++;
    }
    if(divizori==0){
        x[k]=v[i];
        k++;
    }
}
//Acum am introdus in vectorul x toate elementele prime
//De acum trebuie sa sortam vectorul x(stiind ca are k elemente[de la 0 la k-1])
//luam ca ex metoda selectiei minimului
for(i=0;i<k-1;i++){
    min=x[i];
    t=i;
    for(j=i+1;j<k;j++){
        if(x[j]<min){
            min=x[j];
            t=j;
        }
    }
    x[t]=x[i];
    x[i]=min;
}

//De acu, a mai ramas afisarea
for(i=0;i<k;i++){
    cout<<x[i]<<" ";
}

************************************** C++:
#include <iostream>

using namespace std;

int main(){
    int n, i, j, k=0, divizori, min, t;
    cout<<"n=";
    cin>>n;
    int v[n], x[n];
    // v- vectorul initial; x- vectorul final
    for(i=0;i<n;i++){
        cout<<"v["<<i<<"]=";
        cin>>v[i];
    }

    for(i=0;i<n;i++){
        divizori=0;
        for(j=2;j<=v[i]/2;j++){
            if(v[i]%j==0)
                divizori++;
        }
        if(divizori==0){
            x[k]=v[i];
            k++;
        }
    }

    for(i=0;i<k-1;i++){
        min=x[i];
        t=i;
        for(j=i+1;j<k;j++){
            if(x[j]<min){
                min=x[j];
                t=j;
            }
        }
        x[t]=x[i];
        x[i]=min;
    }

    for(i=0;i<k;i++){
        cout<<x[i]<<" ";
    }
    return 0;
}

byankabya99: nu stiu...
artur99: ai incercat sa compilezi?
artur99: :)) sau cum ti-ai dat seama ca ceva nu e ok? :D
byankabya99: Am incercat mai intai in C++ si nu merge
byankabya99: Daca poti, scrie-mi din nou programul cu tot cu initializari si alea alea
artur99: ok, ok :)
artur99: iti dau codul in PM cand termin :D
byankabya99: Ok
artur99: :)) n-ai raspuns in PM :P
artur99: am corectat algoritmul, si am pus si c++ complet :/ scz, era greseala mea, am fost scris n in loc de v[i] la verificarea daca este prim :D
Alte întrebări interesante