Ciao a tutti, mi è stato dato il seguente problema da risolvere: Dato un array v di numeri reali e un numero reale x, scrivere
una funzione che determina se esistono due elementi distinti in v la
cui somma e` x. Nel programma principale stampare eventulmente tali
elementi.

Il prototipo della funzione e`:
int sommaX(double v[], int dim, int x, int *y, int *z)

[La soluzione migliore non usa due cicli annidati.]

Ovviamente risolverlo diventa molto facile tramite i due cicli annidati, ma mi interessava proprio trovare la soluzione migliore Io ho pensato a questa e vorrei sapere il vostro parere a riguardo. Nota: sort è una funzione già scritta e funzionante che non fa altro che ordinare in modo decrescente l'array

codice:
int sommaX (double v[], int dim, double x, double *y, double *z) {
        int inf = 0, sup = dim - 1;
        sort (v,dim);
        while (inf <= sup) {
                if (v[inf] + v[sup] == x) {
                        *y = v[inf];
                        *z = v[sup];
                        return 1;
                }
                else {
                        if (v[inf] + v[sup] < x)
                                sup--;
                        else
                                inf++;
                }
        }
        return 0;
}