#include <stdio.h>
int main()
{
unsigned int k = 5;
printf("%b\n", 1<<k);
printf("%b\n", (1<<k)-1);
if ((1<<k & (1<<k)-1) == 0)
printf ("true !\n");
else
printf ("false !\n");
}
0000 0000 1000 0000
0000 0000 0111 1111
---- ---- ---- ----
0000 0000 0000 0000
int trovaElementoMancante(int arr[], int num_cifre)
{
int i = 0;
int a = 0;
while (a == 0 && i != num_cifre)
{
a = i xor arr[i];
i++;
}
return i - 1;
}
ZfreS ha scritto:Questo è un problema davvero semplice se l'array è ordinato. Infatti basta fare un ciclo e vedere se il massimo numero ha un numero che lo precede.
ZfreS ha scritto:In questo caso, senza troppo sforzo, immagino una soluzione usando l'operatore bitwise xor, in quanto lo xor tra due numeri uguali è zero. Se lo metto in un ciclo, l'indice i dell'array fara lo xor con l'elemento corrispondente finchè questo sarà diverso da zero. Ecco il codice:
- Codice:
int trovaElementoMancante(int arr[], int num_cifre)
{
int i = 0;
int a = 0;
while (a == 0 && i != num_cifre)
{
a = i xor arr[i];
i++;
}
return i - 1;
}
ZfreS ha scritto:Certo, fare la somma tra i numeri che dovrebbero esserci e sotrarre la somma dei numeri che ci sono. Ma la mia soluzione bitwise è corretta?
Visitano il forum: Google [Bot] e 1 ospite