Pages: [1]   Go Down
Print
Author Topic: Swap tra 2 interi, senza utilizzare variabili temporanee  (Read 1000 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« on: 20-05-2009, 13:24:15 »

Ecco la mia soluzione a questo ingegnoso esercizietto lasciato dal prof

Code:

public static void swapWithoutTemp (int a, int b)
{
if (a<b)
{
a=Math.abs (a-b);
b=b-a;
a=b+a;
System.out.println ("Valori dopo lo scambio: "+a+" | "+b);
}
else if (a>b)
{
a=Math.abs (a-b);
b=b+a;
a=b-a;
System.out.println ("Valori dopo lo scambio: "+a+" | "+b);
}
else
{
System.out.println ("Valori uguali, nessuno scambio effettuato!");
}
}


Ditemi che ne pensate!
Buona giornata!
Logged
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #1 on: 20-05-2009, 14:01:04 »

Ciao, bella soluzione. Complimenti.
Io ho pensato ad una soluzione alternativa:

praticamente supponiamo che
x = a
y = b

dove x e y sono le due variabili intere ed a,b i valori relativi.

se pongo
x = x + y = a +b
allora
y = x - y = a + b - b = a
x = x - y = a + b - a = b

di conseguenza il metodo potrebbe essere del tipo
Code:
public static void swapWithoutTemp (int x, int y)
{
                     System.out.println ("Valori prima  dello scambio: "+x+" | "+y)

                     x = x + y;
                     y = x - y;
                     x = x - y;

                     System.out.println ("Valori dopo lo scambio: "+x+" | "+y);
}
« Last Edit: 20-05-2009, 14:08:14 by KingDavid » Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #2 on: 21-05-2009, 17:31:15 »

Cmq questo esercizio era già stato risolto immediatamente in aula da un collega appena il prof l'ha proposto univ
Cmq la prima soluzione è corretta e corrisponde con la soluzione detta in aula, la seconda non l'ho capita ma mi sembra troppo sofisticata....
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #3 on: 27-05-2009, 17:56:38 »

Secondo me la seconda soluzione è ottima!
Peccato che non c'ho pensato io!
 
 
Logged
k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #4 on: 28-05-2009, 08:17:12 »

Non mi dite che non avete mai usato lo XOR per fare lo swap di due variabili!!  [Emoticon] Asd

Code:
        System.out.println("a: " + a + " b: " + b);
       
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

        System.out.println("a: " + a + " b: " + b);

 univ
Logged

Pages: [1]   Go Up
Print
Jump to: