1° Appello - 11/01/2018 - Domanda 1

Io l’ho svolta così:

typedef struct Indici{
	int i, j;
	Indici(int _i, int _j){
		i = _i;
		j = _j;
	}
	void stampa(){
		cout << "i: " << i << ", j: " << j << endl;
	}
} Indici;


Indici funz(int A[], int MAX, int k) {
	for(int i=0; i<MAX; i++){
		for(int j=0; j<MAX; j++){
			if(i!=j){
				//Skippo quando i e j sono uguali
				if(A[j]+A[i] == k){
					return Indici(i, j);
				}
			}
		}
	}
	return Indici(-1, -1);
}

Per evitare l’if si poteva fare una cosa del genere? Mi rispondo da solo perché no, non può funzionare :joy: :joy: in quanto uscirei dal ciclo.

for(int j=0; j<MAX && j!=i; j++){ così esco dal ciclo when j==i

Per il resto mi sembra corretta come funzione

A me sembra giusta invece, perché così effettivamente controlli solo per j<i; cioè eviti di fare lo stesso identico controllo due volte (cioè ad esempio if A[0]+A[10]==K e if A[10]+A[0]==K).
Io avevo fatto una roba simile ma inversa:
for(int i=0; i<MAX-1; i++)
for(int j=i+1; j<MAX; j++)
Così ogni volta controlla solo per gli indici successivi, visto che quelli precedenti sono già stati controllati.

3 Mi Piace