Etapa 0

Desafio 1 – Desce Mais um Barrigudinho

Enunciado
Resolução

#include <stdio.h>
#include <stdlib.h>

int main () {
    int n;
    float a1, a2, v1, v2, resp = 0.14, alcool, porcent;

    scanf ("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%f" , &v1);
        scanf("%f" , &a1);
        scanf("%f" , &v2);
        scanf("%f" , &a2);

        if ((a1 > resp && a2 > resp) || (a1 < resp && a2 < resp)){
            printf("Mo comedia essa mistura, presta nao\n");
        }else {
            alcool = ((v1*a1) + (v2*a2));
            porcent = alcool/(v1+v2);
            if (porcent == resp){
                printf("Bao demais que esse ta no ponto, vai ate esquentar\n");
            } else if(porcent < resp){
                if(a2 > a1){
                    printf("Arriegua tonhao, mistura tudo, o que sobrar de 1 vou estourar na garganta\n");
                } else {
                    printf("Arriegua tonhao, mistura tudo, o que sobrar de 2 vou estourar na garganta\n");
                }
            } else {
                if (a2 > a1){
                    printf("Arriegua tonhao, mistura tudo, o que sobrar de 2 vou estourar na garganta\n");
                } else {
                    printf("Arriegua tonhao, mistura tudo, o que sobrar de 1 vou estourar na garganta\n");
                }
            }
        }
    }

    return 0;
}

Desafio 2 – A alegria não pode parar

Enunciado
Resolução

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (){
    char string[15];
    int qtd, n;

    scanf("%i", &n);

    for (int i = 0; i < n; i++){
        scanf("%s %i", string, &qtd);

        if(!strcmp(string, "vinho"))
            printf("%i %i %i %i\n", qtd, (qtd*45)/1000, (qtd*240)/1000, (qtd*500)/1000);
        else if(!strcmp(string, "limao"))
            printf("%i %i %i %i\n", (qtd*1000)/45, qtd, (qtd*240)/45, (qtd*500)/45);
        else if(!strcmp(string, "laranja"))
            printf("%i %i %i %i\n", (qtd*1000)/240, (qtd*45)/240, qtd, (qtd*500)/240);
        else if(!strcmp(string, "agua"))
            printf("%i %i %i %i\n", (qtd*1000)/500, (qtd*45)/500, (qtd*240)/500, qtd);
    }
    return 0;
}

Desafio 3 – Circulou

Enunciado
Resolução

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printCirculouVezes(int vezes) {

  for (int i = 0; i < vezes; i++) {
    printf("Circulou");
  }
}

void resolve(char *cantoria) {
  int i = 0;
  int n = -1;

  int ultimaPalavra = 1;

  while (cantoria[i] != '\0') {
    if (cantoria[i] == 'C') {
      ultimaPalavra = 1;
      n = i;
    }

    if (cantoria[i] == ' ') {
      ultimaPalavra = 0;
    }

    i++;
  }

  if (ultimaPalavra == 0 || n + 3 > i) {
    printf("Taaaao maravilhoso nosso amoor\n");
    return;
  }

  char culou[] = "culou";

  int index = 0;
  for (int j = n + 3; j < i; j++) {

    if (cantoria[j] == '\0') {
      break;
    }

    if (culou[index] == cantoria[j]) {
      index++;
    } else {

      printf("Taaaao maravilhoso nosso amoor\n");
      return;
    }
  }

  // printf("n: %d\n", n);
  // printf("i: %d\n", i);
  // printf("index: %d\n", index);

  if (index == 5) {
    printf("Taaaao maravilhoso nosso amoor\n");
  } else {
    printf("%s", cantoria);
    printCirculouVezes(5 - index);
    printf("\n");
  }
}

int main() {
  int n;
  scanf("%d\n", &n);

  for (int i = 0; i < n; i++) {
    char cantoria[255];
    scanf("\n%[^\n]", cantoria);
    resolve(cantoria);
  }

  return 0;
}

Desafio 4 – Nos Ares da Sapucaí

Enunciado

Resolução

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int linha;
  int coluna;
} Coordenada;

int matriz[5][5];
int tamanho = 5;

void recebe_matriz() {
  for (int i = 0; i < tamanho; i++)
    for (int j = 0; j < tamanho; j++)
      scanf("%d", &matriz[i][j]);
}

Coordenada busca_elemento(int altura_elemento) {
  Coordenada elemento;
  for (int i = 0; i < tamanho; i++)
    for (int j = 0; j < tamanho; j++)
      if (matriz[i][j] == altura_elemento) {
        elemento.linha = i;
        elemento.coluna = j;
      }
  return elemento;
}

bool posicao_valida(int coordenada_x, int coordenada_y) {
  if (coordenada_x < tamanho && coordenada_x >= 0 && coordenada_y >= 0 &&
      coordenada_y < tamanho)
    return true;
  return false;
}

bool verificacao_horizontal(Coordenada inicio, Coordenada fim) {
  // verificando à direita
  if (inicio.coluna < fim.coluna) {
    for (int i = inicio.coluna; i < tamanho; i++) {
      // se é a chegada
      if (matriz[inicio.linha][i] == -2) {
        return true;
      }
      // se é uma altura intransponível
      if (matriz[inicio.linha][i] > 175) {
        return false;
      }
    }
  }
  // verificando à esquerda
  else if (inicio.coluna > fim.coluna) {
    for (int i = inicio.coluna; i >= 0; i--) {
      // se é a chegada
      if (matriz[inicio.linha][i] == -2) {
        return true;
      }
      // se é uma altura intransponível
      if (matriz[inicio.linha][i] > 175) {
        return false;
      }
    }
  }
  // Não é possível que -01 e -02 estejam no mesmo elemento da matriz
  return false;
}

bool verificacao_vertical(Coordenada inicio, Coordenada fim) {
  // verificando acima
  if (inicio.linha > fim.linha) {
    for (int i = inicio.linha; i >= 0; i--) {
      // se é a chegada
      if (matriz[i][inicio.coluna] == -2) {
        return true;
      }
      // se é uma altura intransponível
      if (matriz[i][inicio.coluna] > 175) {
        return false;
      }
    }
  }
  // verificando abaixo
  else if (inicio.linha < fim.linha) {
    for (int i = inicio.linha; i < tamanho; i++) {
      // se é a chegada
      if (matriz[i][inicio.coluna] == -2) {
        return true;
      }
      // se é uma altura intransponível
      if (matriz[i][inicio.coluna] > 175) {
        return false;
      }
    }
  }
  return false;
}

bool verificacao_diagonal(Coordenada inicio, Coordenada fim) {
  // verificando à direita
  if (inicio.coluna < fim.coluna) {
    // verificando na diagonal nordeste
    if (inicio.linha > fim.linha) {
      for (int i = inicio.linha, j = inicio.coluna; i >= 0 && j < tamanho;
           i--, j++) {
        // se é a chegada
        if (matriz[i][j] == -2) {
          return true;
        }
        // se é uma altura intransponível
        if (matriz[i][j] > 175) {
          return false;
        }
      }
    }
    // verificando na diagonal sudeste
    else {
      for (int i = inicio.linha, j = inicio.coluna; i < tamanho && j < tamanho;
           i++, j++) {
        // se é a chegada
        if (matriz[i][j] == -2) {
          return true;
        }
        // se é uma altura intransponível
        if (matriz[i][j] > 175) {
          return false;
        }
      }
    }
  }
  // verificando à esquerda
  else {
    // verificando na diagonal noroeste
    if (inicio.linha > fim.linha) {
      for (int i = inicio.linha, j = inicio.coluna; i >= 0 && j >= 0;
           i--, j--) {
        // se é a chegada
        if (matriz[i][j] == -2) {
          return true;
        }
        // se é uma altura intransponível
        if (matriz[i][j] > 175) {
          return false;
        }
      }
    }
    // verificando na diagonal sudeste
    else {
      for (int i = inicio.linha, j = inicio.coluna; i < tamanho && j >= 0;
           i++, j--) {
        // se é a chegada
        if (matriz[i][j] == -2) {
          return true;
        }
        // se é uma altura intransponível
        if (matriz[i][j] > 175) {
          return false;
        }
      }
    }
  }
  return false;
}

int main() {
  int num_casos;
  scanf("%d\n", &num_casos);

  for (int i = 0; i < num_casos; i++) {
    recebe_matriz();
    Coordenada inicio = busca_elemento(-1);
    Coordenada chegada = busca_elemento(-2);

    // printf("%d %d\n", inicio.linha, inicio.coluna);
    // printf("%d %d\n", chegada.linha, chegada.coluna);
    // printf("%d\n", verificacao_horizontal(inicio, chegada));
    // printf("%d\n", verificacao_vertical(inicio, chegada));
    // printf("%d\n", verificacao_diagonal(inicio, chegada));

    if (verificacao_horizontal(inicio, chegada) ||
        verificacao_vertical(inicio, chegada) ||
        verificacao_diagonal(inicio, chegada)) {
      printf("Por aqui Blu!\n");
    } else {
      printf("Oopa, nao vai dar nao.\n");
    }
  }
  return 0;
}