ETAPA 1

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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *