int main(int argc, char *argv[]){ int i; int div[2]; for(i=1;i<=NUM_MAX;i++){ div[0]=divisible(i,3); div[1]=divisible(i,5); if((!div[0]||contiene(i,'3'))&&(!div[1]||contiene(i,'5'))) printf("%s\n","fizzbuzz"); else if(!div[0]||contiene(i,'3'))printf("%s\n","fizz"); else if(!div[1]||contiene(i,'5'))printf("%s\n","buzz"); else printf("%i\n",i); } }
int TClist::BuscarBinAprox(t_clist *datos, int izq, int der, char *n, TClist *aproxList) { bool encontrado=false; int centro=0,i=0; while ( (!encontrado) && (izq <= der) ) { i++; centro=(izq+der)/2; // printf("centro: %d, i: %d, d: %d, %s, total: %d\n",centro,izq,der,datos[centro].palabra,size()); if (strcmp(datos[centro].palabra,n) == 0) { encontrado=true; //printf("ENCONTRADO: %s %d\n",datos[centro].palabra,centro); } else { if (strcmp(datos[centro].palabra, n) < 0) izq=centro+1; else der=centro-1; } } int numCoincidencias = 0; //No encontramos la palabra pero es parte de una palabra más larga if (!encontrado && centro > 0) { int len_s1 = strlen(n); int len_s2 = strlen(datos[centro].palabra); char *stringCoincidente = NULL; //printf("Tamaño: %d, %d\n",len_s1,len_s2); int max_len = 0; if (len_s1 > len_s2) { max_len = len_s2; } else { max_len = len_s1; } //Buscamos que por lo menos hayan las dos primeras palabras iguales, sino pueden salir muchos resultados if (max_len > 3) { int len_coincidencia = 0; int contador = 0; bool salir = false; //for (int i=0;i<len_s2;i++) while (!salir && contador < max_len) { if (datos[centro].palabra[contador] == n[contador]) { len_coincidencia++; } else { salir = true; } contador ++; } stringCoincidente = new char[len_coincidencia+1]; stringCoincidente[len_coincidencia] = '\0'; //printf("Tamaño: %d\n",len_coincidencia); for (int i=0;i<len_coincidencia;i++) { stringCoincidente[i] = n[i]; } //printf("Coincidencia: %s\n",stringCoincidente); } //Vamos hacia atras para ver si hubiera más coincidencias if (centro > 0 && max_len > 3) { if (contiene(datos[centro-1].palabra,stringCoincidente) != -1 ) { do { centro--; }while (contiene(datos[centro].palabra,stringCoincidente) != -1 && centro > 0); centro++; } } do { aproxList->add(datos[centro].palabra); //printf("añadimos palabra: %s %d\n",datos[centro].palabra,centro); centro++; numCoincidencias++; }while (contiene(datos[centro].palabra,stringCoincidente) != -1 && centro < numPalabras && numCoincidencias < 50); } // El algoritmo de búsqueda binaria encuentra el número, pero no // asegura que sea el primero si hay repeticiones de números. Por eso // retrocedemos hasta el primer elemento // if (encontrado) // while(strcmp(temp_adverbios[centro-1],n) == 0) // centro--; if (encontrado) return (centro); else return(-1); }