Advertisement
rohan_

ejercicio 4-2:Diferencia de bits (k_interesante)

Aug 31st, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.97 KB | None | 0 0
  1. /*
  2. autor: Jean Rodriguez H.
  3. fecha: Jueves 31 de agosto, 2017
  4. nombre del programa: diferencia_binaria
  5. descripcion: lee n numeros para buscar los numeros k_interesantes (diferencia k de bits) que hay en la forma binaria de cada
  6.              numero con sus sucesores, considerando que el usuario ingresara:
  7.                     - 2<=n<=100 y 0<=k<=16
  8.                     - 0<=numero<=65535
  9.              ejemplo: n=4 k=1. se introduce 0 3 2 1 por teclado. se imprime 4 pues se cumple k diferencia para los indices:
  10.                     (1,3);(1,4);(2,3);(2,4) pues
  11.                     (00,10);(00,01);(11,10);(11,01) tienen k=1 bit de diferencia
  12.                        
  13. */
  14.  
  15. #include <stdio.h>
  16.  
  17. int main(void)
  18. {
  19.  
  20.     short n; //cantidad de numeros a leer
  21.     short k; //diferencia de bits buscada
  22.     scanf("%hi %hi",&n,&k);
  23.     int decimal[n+1]; //guardara los numeros ingresados (base 10)
  24.     char binario[n+1][17]; //guardara la version binaria de cada numero
  25.     int i,j,l; //variables de control de ciclo
  26.     /* se procede a leer los numeros y pasarlos a la forma binaria*/
  27.     for (i=0;i<n;i++) {
  28.         int conversor=0;
  29.         scanf("%i",&decimal[i]);
  30.         char bin[17] ={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}; //2^16=65536
  31.         while(decimal[i]!=0) {
  32.             bin[conversor]='0'+decimal[i]%2;
  33.             decimal[i]/=2;
  34.             conversor++;
  35.         }
  36.         for (j=0;j<17;j++)
  37.             binario[i][j]=bin[j];
  38.     }
  39.     int total=0; //guardara el total de numeros k_interesantes
  40.     /* se procede a comparar la diferencia de bits y guardar el total de k_interesantes*/
  41.     for (i=0;i<n-1;i++) {
  42.         for (j=i+1;j<n;j++) {
  43.             int diferencia=0;
  44.             for (l=0;l<17;l++) {
  45.                 if(binario[i][l]!=binario[j][l])
  46.                     diferencia+=1;
  47.             }
  48.             if (diferencia==k){
  49.                 total+=1;
  50.             }
  51.         }
  52.     }
  53.     printf("%i",total);
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement