Desafio 1 – Uma tática infalível
Enunciado
Resolução
#include <math.h> #include <stdio.h> #include <stdlib.h> int main() { int n; scanf("%d\n", &n); for (int i = 0; i < n; i++) { char *stringFormacao = malloc(sizeof(char) * 10); fgets(stringFormacao, sizeof(char) * 10, stdin); if (stringFormacao[5] == '\n') { // Formato X-Y-Z int formacao[3]; sscanf(stringFormacao, "%d-%d-%d", &formacao[0], &formacao[1], &formacao[2]); int resultado = (formacao[0]*formacao[0]*formacao[1]*formacao[1]*formacao[2]*formacao[2]); printf("%d\n", resultado); } else { // Formato X-Y-Z-T int formacao[4]; sscanf(stringFormacao, "%d-%d-%d-%d", &formacao[0], &formacao[1], &formacao[2], &formacao[3]); int resultado = (formacao[0]*formacao[0]*formacao[1]*formacao[1]*formacao[2]*formacao[2]*formacao[3]*formacao[3]); printf("%d\n", resultado); } free(stringFormacao); } return 0; }
Desafio 2 – Pênaltis
Enunciado
Resolução
#include <stdio.h> #include <stdbool.h> // definição de uma struct que representa um jogador typedef struct { char nome[50]; int penalti; int frieza; } Jogador; // as duas funções seguintes ordenam uma lista de jogadores de acordo com os atributos de pênalti ou frieza, especificados pela flag 'p' e 'f', respectivamente // a ordenação é feita pela versão menos otimizada possível do bubble sort // poderia ser feita uma única função com dois algoritmos de ordenação com comparações diferentes bool comparacao(Jogador* lista, int indice, char flag) { if (flag == 'p') { return (lista[indice].penalti > lista[indice + 1].penalti); } else if (flag == 'f') { return (lista[indice].frieza > lista[indice + 1].frieza); } return NULL; } void ordena(Jogador* lista, int tamanho, char flag) { for (int i = 1; i < tamanho; i++) { for (int j = 0; j < tamanho - 1; j++) { if (comparacao(lista, j, flag)) { Jogador temp = lista[j]; lista[j] = lista[j + 1]; lista[j + 1] = temp; } } } } // função que imprime em ordem crescente os nomes dos jogadores em uma lista void imprime(Jogador lista[], int tamanho) { for (int i = 0; i < tamanho; i++) { printf("%s\n", lista[i].nome); } } int main(int argc, char const *argv[]) { // pegando o tamanho int tam; scanf("%d", &tam); // criando uma lista de jogadores (que, no máximo, terá tamanho 11, como dito no enunciado) Jogador lista[11]; // pegando os dados dos jogadores for (int i = 0; i < tam; i++) { Jogador j; scanf("%s", (j.nome)); scanf("%d", &(j.penalti)); scanf("%d", &(j.frieza)); lista[i] = j; } // lista ordenada definitiva que será impressa como resultado Jogador lista_ordenada[11]; int tam_ordenada = tam; // ordenação da lista origina pelo atributo de pênalti ordena(lista, tam, 'p'); // colocando os 5 primeiros batedores na lista ordenada int j = 0; for (int i = tam - 5; i < tam; i++, j++) { lista_ordenada[j] = lista[i]; } // criando uma lista auxiliar para guardar os jogadores restantes // OBS: esse passo poderia ser substituído por uma função de remoção aplicada à lista original Jogador lista_aux[11 - 5]; int tam_aux = tam - 5; // colocando os jogadores restantes na lista auxiliar for (int i = 0; i < tam_aux; i++) { lista_aux[i] = lista[i]; } // ordenando a lista auxiliar pelo atributo de frieza ordena(lista_aux, tam_aux, 'f'); // colocando os elementos da lista auxiliar na lista ordenada for (int i = tam_aux - 1; i >= 0; i--, j++) { lista_ordenada[j] = lista_aux[i]; } // impressão dos resultados imprime(lista_ordenada, tam_ordenada); return 0; }
Desafio 3 – GGGGOOOOOOOOOOLLLLLLLLLLLLLLLLL
Enunciado
Resolução
#include <ctype.h> #include <malloc.h> #include <stdbool.h> #include <stdio.h> #include <string.h> char *removerRepeticao(char *str) { char last = '/'; char *newStr = malloc(1000); int index = 0; char g = 'g'; char o = 'o'; char l = 'l'; for (int i = 0; i < strlen(str); ++i) { if (tolower(str[i]) == last) continue; newStr[index++] = tolower(str[i]); last = tolower(str[i]); } return newStr; } void solve() { char str[1000]; int ans = 0, flag = 0, tamanho; char *gol = "gol"; scanf("%s", str); strcpy(str, removerRepeticao(str)); for (int i = 0; i < strlen(str); i += 3) { for (int p = 0; p < 3; ++p) { if (str[i + p] != gol[p]) flag = 1; } ans++; } if (flag == 1 || ans == 0) printf("essa copa nunca sera nossa...\n"); else if (ans == 1) printf(":(\n"); else printf("%dx1\n", ans); } int main(void) { int n; scanf("%d", &n); while (n--) solve(); return 0; }
Desafio 4 – Mais rápido que a luz, Neyma, uma fera no campo
Enunciado
Resolução
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int campo[10][10]; int cont, impedido = 0, Neyx; scanf("%d", &cont); for (int i = 0; i < cont; i++) { // recebe matriz e acha o ney for (int y = 0; y < 10; y++) { for (int x = 0; x < 10; x++) { scanf("%d", &campo[y][x]); if (campo[y][x] == 10) { // achei o neymar, salva a posição X Neyx = x; } } } // procura jogadores revais na linha atual e a frente do Ney for (int y = 0; y < 10; y++) { for (int x = Neyx; x < 10; x++) { if (campo[y][x] == 2) { impedido = 1; } } } // testa para saber se está impedido if (impedido == 1) { printf("Posicao legal, Arnaldo, o menino ta solto\n"); impedido = 0; } else { printf("Santo Ronaldinho Gaucho, o chuteira de ouro esta fora de jogo\n"); } } return 0; }