Desafio 1 – BatMacumba
Enunciado
Resolução
#include <stdio.h> #include <stdlib.h> #include <string.h> int canta(int size, char *string) { char novaString[255]; novaString[size] = '\0'; strncpy(novaString, string, size); printf("%s\n", novaString); for (int i = size - 1; i >= 0; i--) { char l = string[i]; if (l == 'a' || l == 'e' || l == 'i' || l == 'o' || l == 'u' || l == '\0') { continue; } if (i > 0) { if (string[i - 1] == ' ') { canta(i - 1, string); } else { canta(i, string); } printf("%s\n", novaString); } break; } } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { char string[255]; scanf("\n%[^\n]", string); canta(strlen(string), string); } return 0; }
Desafio 2 – DADINHO É O C$%&#
Enunciado
Resolução
#include <math.h> #include <stdio.h> #include <stdlib.h> int mapa[6][6]; int posX; int posY; double hipotenusa(int cat1, int cat2) { return sqrt(pow(cat1, 2) + pow(cat2, 2)); } void horaDaFuga() { double menorDist = 7; int inimigo = -1; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { if (mapa[i][j] == 1 || mapa[i][j] == 0) { continue; } else if (i == posY) { int dist = abs(j - posX); if (dist <= menorDist) { if (dist == menorDist) { if (mapa[i][j] > inimigo) { inimigo = mapa[i][j]; } } else { inimigo = mapa[i][j]; } menorDist = dist; } } else if (j == posX) { int dist = abs(i - posY); if (dist <= menorDist) { if (dist == menorDist) { if (mapa[i][j] > inimigo) { inimigo = mapa[i][j]; } } else { inimigo = mapa[i][j]; } menorDist = dist; } } else { int distX = abs(j - posX); int distY = abs(i - posY); double dist = hipotenusa(distX, distY); if (dist <= menorDist) { if (dist == menorDist) { if (mapa[i][j] > inimigo) { inimigo = mapa[i][j]; } } else { inimigo = mapa[i][j]; } menorDist = dist; } } } } if (inimigo != -1) { printf("Vou correr poque senao uns "); switch (inimigo) { case 2: printf("Policia"); break; case 3: printf("Fumaca"); break; case 4: printf("Quero-Quero"); break; case 5: printf("Gesonel"); break; } printf(" me pega, estao a %.2lfkm.", menorDist); } int i = posX + 1; while (i <= 6) { if (i == 6) { printf(" Vazei pro Rio e nunca mais voltei.\n"); break; } if (mapa[posY][i] != 0) { if (mapa[posY][i] == 2) { printf(" Eu so quero eh ser feliz, andar tranquilamente na favela em " "que eu nasci.\n"); break; } else if (mapa[posY][i] == 3) { printf(" cof cof, isso ta pior que churrasco em apartamento.\n"); break; } else if (mapa[posY][i] == 4) { printf(" Aaah por que tem tanto Quero-Quero nesse lugar.\n"); break; } else if (mapa[posY][i] == 5) { printf(" Volta pro teu desafio meu nobre, tem que salvar a terra.\n"); break; } } i++; } } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { for (int j = 0; j < 6; j++) { for (int k = 0; k < 6; k++) { scanf("%d", &mapa[j][k]); if (mapa[j][k] == 1) { posY = j; posX = k; } } } horaDaFuga(); } return 0; }
Desafio 3 – Desordem Programada
Enunciado
Resolução
#include <stdbool.h> #include <stdio.h> #include <string.h> // definição de uma struct que representa cada programa typedef struct { char nome[10]; int prioridade; bool ehAnime; } Programa; void definirAtributos(Programa *p) { /* verificar nome do programa e definir prioridade com base: 1 - Os Padrinhos M - PadrinhosM 2 - Bob Esponja - BobE 3 - Dragon Ball - DragB - eh anime 4 - Caverna Do D. - CavernaD 5 - Hamtaro - Hamtaro - eh anime 6 - Kim Possible - KimP 7 - Pica-Pau - PicaP 8 - Rugrats - Rugrats 9 - Beyblade - BeyB - eh anime 10 - Digimon - Digi - eh anime 11 - Luluzinha - Lulu 12 - X-men - X-men */ if (strcmp(p->nome, "PadrinhosM") == 0) { p->prioridade = 1; p->ehAnime = false; } else if (strcmp(p->nome, "BobE") == 0) { p->prioridade = 2; p->ehAnime = false; } else if (strcmp(p->nome, "DragB") == 0) { p->prioridade = 3; p->ehAnime = true; } else if (strcmp(p->nome, "CavernaD") == 0) { p->prioridade = 4; p->ehAnime = false; } else if (strcmp(p->nome, "Hamtaro") == 0) { p->prioridade = 5; p->ehAnime = true; } else if (strcmp(p->nome, "KimP") == 0) { p->prioridade = 6; p->ehAnime = false; } else if (strcmp(p->nome, "PicaP") == 0) { p->prioridade = 7; p->ehAnime = false; } else if (strcmp(p->nome, "Rugrats") == 0) { p->prioridade = 8; p->ehAnime = false; } else if (strcmp(p->nome, "BeyB") == 0) { p->prioridade = 9; p->ehAnime = true; } else if (strcmp(p->nome, "Digi") == 0) { p->prioridade = 10; p->ehAnime = true; } else if (strcmp(p->nome, "Lulu") == 0) { p->prioridade = 11; p->ehAnime = false; } else if (strcmp(p->nome, "X-men") == 0) { p->prioridade = 12; p->ehAnime = false; } } // Bubble Sort utilizado para ordenar a lista void ordenaProgramacao(Programa *lista, int tamanho) { for (int i = 1; i < tamanho; i++) { for (int j = 0; j < tamanho - 1; j++) { if (lista[j].prioridade > lista[j + 1].prioridade) { Programa temp = lista[j]; lista[j] = lista[j + 1]; lista[j + 1] = temp; } } } } // funcao responsavel por imprimir toda a programacao void imprimeProgramacao(Programa lista[], int tamanho) { for (int i = 0; i < tamanho; i++) { printf("%s ", lista[i].nome); } printf("\n"); } // funcao responsavel por identificar proximo nao anime da programacao int proximoNaoAnime(Programa lista[], int i, int tamanho) { int programasRestantes = tamanho - i; for (; programasRestantes != 0; programasRestantes--, i++) { if (lista[i].ehAnime == false) return i; } return -1; } void ordenaRepetido(Programa *lista, int tamanho) { int i, contAnime = 0; // iterar por toda a programacao for (i = 0; i < tamanho; i++) { // identifica se ha repetido if (lista[i].ehAnime == true) { contAnime++; } else { contAnime = 0; } // quando ha 3 animes repetidos, fazer modificacao na ordem if (contAnime == 3) { int proximo = proximoNaoAnime(lista, i, tamanho); if (proximo == -1) return; Programa aux = lista[i]; lista[i] = lista[proximo]; lista[proximo] = aux; contAnime = 0; } } } int main() { int casosTeste; scanf("%d", &casosTeste); int i; for (i = 0; i < casosTeste; i++) { // entrada da quant de programas int quantProgramas; scanf("%d", &quantProgramas); // criar lista em que ficara toda a programacao do dia Programa programacao[quantProgramas]; // entrada dos programas + alimenta atributos da estrutura int j; for (j = 0; j < quantProgramas; j++) { Programa p; scanf("%s", (p.nome)); definirAtributos(&p); programacao[j] = p; } // caso tenha poucos programas if (quantProgramas < 6) { printf("Soh isso? Tem crianca chorando\n"); } else { // ordena com base na prioridade de cada programa ordenaProgramacao(programacao, quantProgramas); // ordena os animes repetidos ordenaRepetido(programacao, quantProgramas); imprimeProgramacao(programacao, quantProgramas); } } return 0; }
Desafio 4 – João grilo cabra safado da peste
Enunciado
Resolução
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define MAX 100 void obterPalavra(char** palavra) { char* buffer = (char*) malloc(MAX * sizeof(char)); scanf("%s", buffer); *palavra = (char*) malloc(strnlen(buffer, strlen(buffer)) * sizeof(char)); sprintf(*palavra, "%s", buffer); } void adicionarPalavra(char** lista_palavras, int* tamanho_lista, char* palavra) { lista_palavras[*tamanho_lista] = palavra; (*tamanho_lista)++; } void removePonto(char** palavra) { } int numRepeticoes(char** lista_palavras, int tamanho_lista, char* palavra) { int counter = 0; for (int i = 0; i < tamanho_lista; i++) { char* c = lista_palavras[i]; if(!strcmp(c, palavra)) counter++; } return counter; } bool primoMenorQue80(int num) { int primos[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79}; for (int i = 0; i < (sizeof(primos) / sizeof(int)); i++) { if(num == primos[i]) return true; } return false; } bool verificarParada(char** lista_palavras, int tamanho_lista) { if (!strcmp(lista_palavras[tamanho_lista - 1], "mundo") && !strcmp(lista_palavras[tamanho_lista - 2], "do") && !strcmp(lista_palavras[tamanho_lista - 3], "inteligente") && !strcmp(lista_palavras[tamanho_lista - 4], "mais") && !strcmp(lista_palavras[tamanho_lista - 5], "Grilo") && !strcmp(lista_palavras[tamanho_lista - 6], "o") && !strcmp(lista_palavras[tamanho_lista - 7], "Acabousse") ) return true; else return false; } int main() { while(true) { char** lista_palavras = (char**) malloc(MAX * sizeof(char*)); int tamanho_lista = 0; bool flag = true; while(flag) { char* palavra_atual; obterPalavra(&palavra_atual); if(palavra_atual[strlen(palavra_atual) - 1] == '.') { // removendo o ponto final // printf("%s %d\n", palavra_atual, (int) strlen(palavra_atual)); strtok(palavra_atual, "."); // printf("%s %d\n", palavra_atual, (int) strlen(palavra_atual)); flag = false; } adicionarPalavra(lista_palavras, &tamanho_lista, palavra_atual); } if(verificarParada(lista_palavras, tamanho_lista)) break; // reutilizando a flag flag = false; for (int i = 0; i < tamanho_lista; i++) { // se o número de repetições de alguma palavra for primo e menor que 80, printar a frase e sair do loop if(primoMenorQue80(numRepeticoes(lista_palavras, tamanho_lista, lista_palavras[i]))) { printf("O amarelo mais amarelo que eu ja tive a honra de condenar!\n"); flag = true; break; } } if(!flag) printf("Valha-me Nossa Senhora, Mae de Deus de Nazare!\n"); } return 0; }