[C++] Elementi in comune array/stringhe
Dovrei fare questo:
"//Letti in input due arrayAeB, rispettivamente di n elementi, stampa tutti gli elementi in comune"
In questo programma io li stampo se tutti diversi non riesco a capire come stamparli in comune...
"//Letti in input due arrayAeB, rispettivamente di n elementi, stampa tutti gli elementi in comune"
In questo programma io li stampo se tutti diversi non riesco a capire come stamparli in comune...
#include <iostream> using namespace std; int main() { // creo i vettori e li popolo int v1[3] = {1, 5, 7}; int v2[3] = {5, 3, 2}; int i = 0; // Ora li confronto: for(i=0; i<3; i++) { if (v1[i] != v2[i]) { // se trovo delle differenze... cout << v1[i] << " " << v2[i] << endl; // ... le stampo! } } return 0; }
Risposte
Se con elementi in comune intende semplicemente dire che v1[ i ] == v2[ i ], allora è sufficiente negare la tua condizione, cioè usare == al posto di !=.. Se invece intende dire valori in comune tra i due array, che quindi non si trovano agli stessi indici, allora il codice è più complicato (e lo è anche nel caso di elementi diversi).
"apatriarca":
Se con elementi in comune intende semplicemente dire che v1[ i ] == v2[ i ], allora è sufficiente negare la tua condizione, cioè usare == al posto di !=.. Se invece intende dire valori in comune tra i due array, che quindi non si trovano agli stessi indici, allora il codice è più complicato (e lo è anche nel caso di elementi diversi).
Esatto trovare valori comuni tra due array.
Ho fatto cosi' pero' ho notato se per caso due dei numeri sono 6 e 0 nel primo array e nel secondo array tra i 5 numeri c'è due volte 0 come risultato mi esce 6 0 0 , dovrebbe venirmi invece 6 e 0 come comuni non capisco come dovrei correggere...
#include <iostream> #include <cmath> #include <ctime> #include <cstdlib> using namespace std; int main(){ int num1[5]; int num2[5]; srand(time(NULL)); cout<<"array 1"<<endl; for (int i = 0; i <5; i++){ num1[i] = rand() % 10; cout<<num1[i]<<endl; } cout<<"array 2"<<endl; for (int j = 0; j < 5; j++){ num2[j] = rand() % 10; cout<<num2[j]<<endl; } cout<<"elementi comuni"<<endl; for (int i = 0; i <5; i++){ for (int j = 0; j <5; j++){ if (num1[i] == num2[j]) { cout<<" "<<num1[i]; } } } }
Puoi inserire un break all'interno dell'if per uscire dal ciclo interno al primo valore trovato. Tuttavia rimane il problema inverso, cioè se hai un valore ripetuto nel primo array che compare solo una volta nel secondo. Credo che la soluzione più semplice sia quella di avere un array di bool di supporto che è inizializzato a false. Questo array serve per indicare che un elemento del secondo array è già stato "usato" e quindi deve essere ignorato.