Échangez trois numéros en un seul relevé

Est-il possible d’échanger trois nombres en une seule déclaration?

Par exemple :

  • a = 10
  • b = 20
  • c = 30

Je veux que les valeurs soient modifiées selon la liste suivante

a = 20 b = 30 c = 10 

Ces valeurs peuvent-elles être transférées sur une seule ligne?

J’ai trouvé une autre solution à cette question.

Vous pouvez l’utiliser dans de nombreux langages tels que C,C++ and Java .

Cela fonctionnera pour float et long aussi.

 a=(a+b+c) - (b=c) - (c=a); 
 $ python >>> a, b, c = 10, 20, 30 >>> print a, b, c 10 20 30 >>> a, b, c = b, c, a >>> print a, b, c 20 30 10 

C’est une question stupide. Mais voici la seule réponse (à ce jour) qui est à la fois bien défini C et vraiment une seule ligne:

 a ^= b, b ^= a, a ^= b, b ^= c, c ^= b, b ^= c; 

Utilise correctement l’ algorithme d’échange XOR .

Remarque: Cela suppose que a , b et c sont tous du même type entier (la question ne spécifie pas).

Solution en C #. En utilisant xor, échangez a et b premier. Le résultat de l’affectation est la valeur atsortingbuée. Dans ce cas, b est la variable la plus à gauche et est renvoyé à la suite de (b ^= a ^ (a ^= b ^= a)) . Puis échangez c et b utilisant le même algorithme . 🙂

  int a = 10; int b = 20; int c = 30; c ^= (b ^= a ^ (a ^= b ^= a)) ^ (b ^= c ^= b); 

Utiliser l’opérateur virgule …

 a = 10; b = 20; c = 30; /* one statement */ tmp = a, a = b, b = c, c = tmp; /* assumes tmp has been declared */ assert(a == 20); assert(b == 30); assert(c == 10); 

Euh, j’aime ces choses logiques, ma solution:

 a= b+c-((b=c)+(c=a))+c; 

BTW: J’ai testé cela (en utilisant JS) et en travaillant avec des nombres 🙂

Modifier :

J’ai testé avec des nombres négatifs et décimaux et je travaillais aussi 🙂

Puisque vous n’avez pas précisé la langue, je choisirai l’une de mes choix. C’est Ruby.

 sergio@soviet-russia$ irb 1.9.3p0 :001 > a = 10 => 10 1.9.3p0 :002 > b = 20 => 20 1.9.3p0 :003 > c = 30 => 30 1.9.3p0 :004 > a, b, c = b, c, a # <== transfer is happening here => [20, 30, 10] 1.9.3p0 :005 > a => 20 1.9.3p0 :006 > b => 30 1.9.3p0 :007 > c => 10 

Essayez un scénario différent: Exemple:

 a = 10 b = 20 c = 30 a= a+b+c; b=abc; c=abc; a=abc; 

Pour n nombre,

 a = 10 b = 20 c = 30 . . . n a= a+b+c+......+n; b=abc-.......-n; c=abc-.......-n; . . . n=abc-.......-n; a=abc-.......-n;