Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //gcc 5.4.0
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- int num;
- int cont = 0;
- int L, R;
- int i = 0, j = 0, n = 0;
- int vector[24];
- do{
- scanf("%d",&num);
- }while((num < 1) || (num > 24));
- do{
- scanf("%d",&L);
- }while((L < 1) || (L > 100));
- do{
- scanf("%d",&R);
- }while((R < L)||(R < 1) || (R > 100));
- for(i=0; i < num; i++){
- scanf("%d",&vector[i]);
- }
- int bits[24] = {};
- int suma=0,bit = 0, copiaNumero = 0, cont1 = 0, aux=0;
- for(i=0; i < 24 ; i++){
- bits[i] = 0;
- }
- //Para que sea más rapido se omite si es menor a 2
- if(num > 2){
- for(n = 0; n < num; n++){ //Para obtener todas las combinaciones lo recorro hasta num
- copiaNumero = n; //Usando el n para avanzar
- bit = 23;
- while(copiaNumero != 0){ //Transformo el "n" en binario y lo guardo en el vector bits
- bits[bit] = copiaNumero%2;
- bit--;
- copiaNumero = copiaNumero/2;
- }
- for(i = 0; i < 24; i++){ //Cambio el orden del los bits
- aux = bits[i];
- bits[i] = bits[23-i];
- bits[23-i] = aux;
- }
- cont1 = 0; //Reseteo el cont1
- for(j = 0; j < num; j++){ //Este for es para que saber cuando hay un solo 1 ej n=4 bits=100
- if(bits[j] == 1){
- cont1++;
- }
- }
- if(cont1 > 1){ //Sabiendo que hay minimo 2 unos
- suma = 0; //Reseteo suma
- for(i = 0 ; i < num; i++){ //recorro el vector y guardo el valor en suma
- suma = suma + (vector[i]*bits[i]);
- }
- if((suma >= L)&&(suma <= R)){ //Si se cumple la condición se aumentará el cont
- cont++;
- }
- }
- }
- }
- printf("%d", cont);
- return 0;
- }
Add Comment
Please, Sign In to add comment