10

me preguntaron en una entrevista: cómo convertir 0 a 1 y 1 a 0. respondí:Convertir 0 a 1 y viceversa

  1. simple if y switch
  2. Bit mover de un tirón.

¿Hay algún otro enfoque?

+0

¿Qué quiere decir con "bit flipping", específicamente? –

+4

No sabía que Java es independiente del idioma. Guay. – BalusC

+0

@Balus: natural-language-agnostic maybe ;-) – Joey

Respuesta

27

algunas posibilidades obvias:

!n 
1-n 
n^1 
n==0 
n!=1 
n<1 
+1

'! N' no es fiable 1 => 0, 0 => 1 en una forma independiente del idioma (en algunos idiomas,! 0 = -1) ; en Java, ni siquiera funciona ("operator! no se puede aplicar a int"). –

+0

@GregS: buen punto ... lo eliminé y agregué un par más. –

+0

n^1, ¿quisiste decir 0^n? –

30

aritmética simple:

x = 1 - x; 

En realidad, hay un número infinito de polinomios que asignar 1 a 0 y viceversa. Por ejemplo:

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1; 
+0

Simplifica a 'x^5 - x^4 + x^2 - 2x + 1'. Pero 'x^n = x' para' x = 0 o 1', por lo que se simplifica aún más a 'x - x + x -2x + 1' que es simplemente' 1 - x'. (En caso de que alguien no esté seguro de si podrían usar el segundo polinomio) – pkr298

0

Creo que se puede hacer ABS (VAR - 1), pero creo que sus enfoques son más elegantes

3

que probablemente se espera que uso bit a bit NO

-1

Esto debería funcionar para cualquier par de números ...

(EDIT: buscando en las otras respuestas que pude haber leído mal la pregunta ... pero todavía me gusta mi respuesta :-)

mesa
public class X 
{ 
    public static void main(final String[] argv) 
    { 
     int x = Integer.parseInt(argv[0]); 
     int y = Integer.parseInt(argv[1]); 

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

     System.out.println(x); 
     System.out.println(y); 
    } 
} 
15

de búsqueda:

int[] swap = { 1, 0 }; 

Y más adelante:

x = swap[x]; 
+0

¿Qué pasa con esto? El OP pidió métodos alternativos. – Ponkadoodle

+0

Sí, en serio. – Sean

+2

Esta es una respuesta totalmente increíble. Me gusta porque es el menos matemático. También a diferencia de las otras respuestas, esto fallará si el dominio y el rango están fuera de 0-1 ala fallan rápido aunque no con gracia. +1 –

1

Este uno no es el mejor, pero funciona:

pow(0, n); 
+0

pow (0, 0) matemáticamente no está definido, ver http://mathworld.wolfram.com/Power.html –

+1

¿Stephen Wolfram es una especie de autoridad en matemáticas? Eche un vistazo a este artículo para ver algunas opiniones diferentes: http://en.wikipedia.org/wiki/Exponentiation#Zero_to_the_zero_power – Adam

+0

@ Adam Doyle: Sí, cuente con Wikipedia para presentar todos los puntos de vista simultáneamente. Es el equivalente en Internet del [Total Perspective Vortex] (http://en.wikipedia.org/wiki/Total_Perspective_Vortex#Total_Perspective_Vortex). –

2

S ome Trig: COS (PI * N)^2

en Python

import math 
math.cos(math.pi * n) ** 2 

No puedo creer que la gente se olvidó de módulo:

(3 + n) % 2 
+0

Además, 'cos (n * pi/2)' –

+0

+1: ¡Me encanta! – Dinah

5

Tome un clip de papel. Enderezarlo Es un 1. Doble hacia los extremos. Es un 0. Para que sea un 1, alíselo.

+1

genio! Necesito más de esto. – fastcodejava

+1

No creo que Java sea lo suficientemente potente como para hacer eso. –

+0

@ Adam: Probablemente necesites encontrar un robot ceceo integrado para realmente hacer bien el trabajo. Solo Embedded Robot Lisps tiene el poder de transformar verdaderamente los 0 en 1 y viceversa. –

0

He usado -~-n en JavaScript. Convierte 1 a -1 que se representa como 11111111, luego voltea los bits a 00000000 que es 0. El segundo signo negativo no afecta a 0. Por otro lado, si n es 0, el primer signo negativo no tiene efecto , la tilde voltea los bits, y el segundo signo negativo convierte -1 a 1.

+0

dudoso, pero genio ಠ_ಠ – Jehan

Cuestiones relacionadas