Desafio 1 – X9
Enunciado
Resolução
#include <stdio.h> #include <string.h> char letra(char letra){ switch(letra){ case 'a': return 'r'; case 'b': return 'x'; case 'c': return '4'; case 'd': return '7'; case 'e': return 'z'; case 'f': return 'i'; case 'g': return 'n'; case 'h': return 'y'; case 'i': return '3'; case 'j': return 'p'; case 'k': return '9'; case 'l': return 'b'; case 'm': return '0'; case 'n': return '1'; case 'o': return 't'; case 'p': return 'w'; case 'q': return '2'; case 'r': return 'v'; case 's': return 'c'; case 't': return '8'; case 'u': return 'k'; case 'v': return 'm'; case 'w': return 'd'; case 'x': return 'o'; case 'y': return 'q'; case 'z': return 'j'; case '0': return 'e'; case '1': return 'g'; case '2': return '5'; case '3': return 'l'; case '4': return 'h'; case '5': return 'f'; case '6': return 's'; case '7': return 'u'; case '8': return 'a'; case '9': return '6'; default : return ' '; } } int main(){ char a [1000] = {}, b[1000]={},res [1000]={}; int n,ii; scanf("%i", &n); for(ii=0; ii<n; ii++){ // limpando todas as entradas memset(a,0,strlen(a)); memset(b,0,strlen(b)); memset(res,0,strlen(res)); scanf("%s", a); scanf ("%s", b); fflush(stdin); int i; int tois = 0; for (i=0; i<=strlen (b); i++){ if (a[i] != b[i]){ //Verifica quais caracteres sao diferentes res[tois] = letra(b[i]); //faz a analise de qual é o char correspondente tois++; } } printf("%s\n", res); } return 0; }
Desafio 2 – Treinamento de Kung Fu
Enunciado
Resolução
#include <stdio.h> int main(){ int n, m; scanf("%i", &n); scanf("%i", &m); int ent[m], saida[m], pares[m]; int qntP; while(n--){ qntP = 0; for(int i = 0; i < m; i++) scanf("%i", &ent[i]); for(int i = 0; i < m; i++){ if(!(ent[i]%2)){ saida[i] = ent[i]*i; pares[qntP] = ent[i]; qntP++; } else{ saida[i] = pares[qntP-1] + pares[qntP-2]; } } for(int i = 0; i < m; i++){ printf("%i", saida[i]); if(i < m-1) printf(" "); } printf("\n"); } return 0; }
Desafio 3 – Pulando Prédios
Enunciado
Resolução
#include <stdio.h> #include <malloc.h> int achaTopoPredio(int ** tabela, int tam, int col); int livreParaFrente(int ** tabela, int lin, int inicio, int fim); int livreVertical(int ** tabela, int col, int inicio, int fim); int main(){ //variaveis int N, M, linha, j, coluna, topoDireita, topoEsquerda, colunaDireita, colunaEsqueda, maxPassos, passos; scanf("%i", &N); //alocando memória para o vetor já preenchendo os valores for(j = 0; j < N; j++){ //tamanho do vetor quadratico scanf("%i", &M); //alocando memoria para os ponteiros das linhas do vetor int** tabela = (int **) malloc(sizeof(int*)*M); for(linha = 0; linha < M; linha++){ //alocando memoria para o valor da coluna do vetor tabela[linha] = (int*) malloc(sizeof(int)*M); for(coluna = 0; coluna < M; coluna++){ //pegando valor da linha i na coluna k scanf("%i", &tabela[linha][coluna]); } } //pegando o poder de passos scanf("%i", &maxPassos); //O predio da direita sempre fica na ultima coluna do vetor, portanto M-1 colunaDireita = M-1; //procura a posicao da linha do topo do predio da direita topoDireita = achaTopoPredio(tabela, M, colunaDireita); //iniciando a coluna do topo do predio a direita em 0, pois eh o caso mais comum. colunaEsqueda = 0; //loop para encontrar em qual coluna se encontra o topo do predio da esquerda while(colunaEsqueda < colunaDireita){ topoEsquerda = achaTopoPredio(tabela, M, colunaEsqueda); //se encontrou o topo, para o loop if(topoEsquerda != -1){ break; } //do contrario vai para a proximo coluna colunaEsqueda++; } for(linha=topoDireita; linha >= 0; linha--){ if(livreParaFrente(tabela, linha, topoDireita, 0)&&livreVertical(tabela, M-1, topoDireita, linha)&&livreVertical(tabela, 0, topoEsquerda, linha)){ passos = (topoDireita-linha)+M-1+(topoEsquerda-linha); if(passos <= maxPassos){ printf("Pular predio eh moleza pra mim.\n"); break; } } } //se o loop nao encontrou solucao nem na linha 0, entao linha sai do loop com valor -1 //portanto, se a linha for negativa, o loop nao encontrou nenhuma solucao if(linha < 0){ printf("Nao vai dar nao Morpheus.\n"); } //liberando o espaco na memoria para proximo loop for(linha = 0; linha < M; linha++){ for(coluna = 0; coluna<M; coluna++){ free(tabela[linha][coluna]); } } } } int achaTopoPredio(int ** tabela, int tam, int col){ int i = 0; //verifica todas as linhas do vetor do inicio ao fim da matriz (tam-1) //usa a coordenada da coluna passada por parametro for(int i = 0; i < tam; i++){ if(tabela[i][col] == 1){ return i; } } //deixando a baleira ser livre //"free uIae" "free willy" free(i); return -1; } int livreParaFrente(int ** tabela, int lin, int inicio, int fim){ int i; //verifica todas as colunas do vetor do inicio ao fim //com a coordenada da linha passada por parametro for(i = inicio; i >= fim; i--){ //se algum for obstaculo retorna falso 0 if(tabela[lin][i] == 2){ return 0; } } free(i); //se nao encontrou obstaculos do inicio ao fim retorna true 1 return 1; } int livreVertical(int ** tabela, int col, int inicio, int fim){ int i; //verifica todas as linhas do vetor do inicio ao fim //com a coordenada da coluna passada por parametro //se o inicio for maior que fim, entao vamos varrer de baixo para cima (subindo) if(inicio > fim){ for(i = inicio; i >= fim; i--){ if(tabela[i][col]==2){ //se algum for obstaculo retorna falso 0 return 0; } } } //do contrario, o inicio eh menor que o fim, entao vamos varrer de cima para baixo (descendo) else{ for(i = inicio; i <= fim; i++){ if(tabela[i][col]==2){ //se algum for obstaculo retorna falso 0 return 0; } } } free(i); return 1; }
Desafio 4 – Passeio na Nabucodonosor
Enunciado
Resolução
#include <stdio.h> #include <string.h> #include <math.h> int main(){ int n; scanf("%i\n", &n); int i; for(i=0; i<n; i++){ char situacao[8]; scanf("%[^\r\n]\n", situacao); //adicionar um \n no scanf para descer pro proximo caso - EXCLUSIVO PRO DJ. fflush(stdin); //limpeza de buffer int a = abs((situacao[0]-'0') - (situacao[4]-'0')); //distancia entre a posicao de linhas da lula 1 para lula 2 int b = abs((situacao[2]-'0') - (situacao[6]-'0')); //distancia entre a posicao de colunas da lula 1 para lula 2 if(situacao[4]-'0' == 3 || situacao[6]-'0' == 3 || situacao[0]-'0' == 3 || situacao[2]-'0' == 3 || //caso pelo menos uma delas esteja de cara para a nave (a != 6 && b != 6 && a !=0 && b != 0 && (abs(situacao[4]-'0' - 3) == 1 || abs(situacao[6]-'0' - 3) == 1) && //a e b != 0 e !=6 indica que nao estao nem em opostos nem indo pro mesmo lugar (abs(situacao[0]-'0' - 3) == 1 || abs(situacao[2]-'0' - 3) == 1))) //sendo a distancia = 1, pelo menos uma delas estah em area de advertencia, e se a e b != 0, entao nao da pra se esconder em nenhuma direcao printf("A casa caiu, Cleitinho! Soca PEM neles!\n"); else{ //se a distancia pra uma das lulas do cano eh 1 na posicao de linhas, se esconde da visao horizontal if(abs(situacao[4]-'0' - 3) == 1 || abs(situacao[0]-'0' - 3) == 1) printf("Toca para vertical, Tank.\n"); //se a distancia pra uma das lulas do cano eh 1 na posicao de colunas, se esconde da visao vertical else if(abs((situacao[6]-'0') - 3) == 1 || abs((situacao[2]-'0') - 3) == 1) printf("Toca para horizontal, Tank.\n"); //senao, ta tudo nice 😀 else printf("Barra limpa, timeee\n", situacao); } } return 0; }