Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- autor: Jean Rodriguez H.
- fecha: Jueves 31 de agosto, 2017
- nombre del programa: diferencia_binaria
- descripcion: lee n numeros para buscar los numeros k_interesantes (diferencia k de bits) que hay en la forma binaria de cada
- numero con sus sucesores, considerando que el usuario ingresara:
- - 2<=n<=100 y 0<=k<=16
- - 0<=numero<=65535
- ejemplo: n=4 k=1. se introduce 0 3 2 1 por teclado. se imprime 4 pues se cumple k diferencia para los indices:
- (1,3);(1,4);(2,3);(2,4) pues
- (00,10);(00,01);(11,10);(11,01) tienen k=1 bit de diferencia
- */
- #include <stdio.h>
- int main(void)
- {
- short n; //cantidad de numeros a leer
- short k; //diferencia de bits buscada
- scanf("%hi %hi",&n,&k);
- int decimal[n+1]; //guardara los numeros ingresados (base 10)
- char binario[n+1][17]; //guardara la version binaria de cada numero
- int i,j,l; //variables de control de ciclo
- /* se procede a leer los numeros y pasarlos a la forma binaria*/
- for (i=0;i<n;i++) {
- int conversor=0;
- scanf("%i",&decimal[i]);
- char bin[17] ={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}; //2^16=65536
- while(decimal[i]!=0) {
- bin[conversor]='0'+decimal[i]%2;
- decimal[i]/=2;
- conversor++;
- }
- for (j=0;j<17;j++)
- binario[i][j]=bin[j];
- }
- int total=0; //guardara el total de numeros k_interesantes
- /* se procede a comparar la diferencia de bits y guardar el total de k_interesantes*/
- for (i=0;i<n-1;i++) {
- for (j=i+1;j<n;j++) {
- int diferencia=0;
- for (l=0;l<17;l++) {
- if(binario[i][l]!=binario[j][l])
- diferencia+=1;
- }
- if (diferencia==k){
- total+=1;
- }
- }
- }
- printf("%i",total);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement