Resoluções da Etapa 3

Desafio 1 – Proteja eles

Enunciado
Resolução
#include <math.h>
#include <stdio.h>
#include <string.h>

int main(){
	int dano, velocidade, pente, ttbalas, balaspente;
	int n, f1, f2, erro, bixos, acaboub, matou, morreu;
	double vida, doeu;
	scanf ("%i\n", &n);
	char arma [10];
		
	for (f1=0;f1<n;f1++){
		scanf ("%s", &arma);
		erro = 0;
		if(strcmp(arma, "deagle")== 0){
			dano= 10;
			velocidade = 4;
			pente = 7;
			ttbalas = 35;
		} else if (strcmp(arma,"glokinha") == 0){
			dano= 2;
			velocidade = 6;
			pente = 20;
			ttbalas = 60;
		} else if (strcmp (arma,"doze") == 0){
			dano = 20;
			velocidade = 3;
			pente = 3;
			ttbalas = 15;
		} else if (strcmp (arma, "ak47")==0){
			dano = 10;
			velocidade = 9;
			pente = 30;
			ttbalas = 60;
		} else if (strcmp (arma, "p90tinha")==0){
			dano = 11;
			velocidade = 11;
			pente = 30;
			ttbalas= 60;
		} else if (strcmp (arma, "GRANADA")==0){
			dano = 50;
			velocidade = 1;
			pente = 1;
			ttbalas = 3;
		} else if (strcmp (arma, "SCARtop") == 0){
			dano = 10;
			velocidade = 2;
			pente = 20;
			ttbalas = 60;
		} else {
			printf("que arma eh essa mano? inventou agora foi?\n");
			erro=1;
		} 
		doeu = dano*velocidade*0.8; //dano total
		balaspente = pente;
		
		if (erro==0){
			scanf("%i", &bixos);
			for(f2=0; f2<bixos; f2++){ //for dos bixos
				scanf("%lf", &vida);
				while (vida>0){ //enquanto o bixo ainda tiver vida
				if (balaspente <= 0 && ttbalas >0 && f2<=bixos){ //precisa recarregar e ainda tem bixos
						printf ("SEGURA AI Q VO RECARREGA\n");
						ttbalas = ttbalas - pente;
						balaspente = pente;
					}
					else if (ttbalas<=0 && balaspente<=0 && matou !=1){ //acabaram todas as balas os bixos ainda nn morreram
						printf ("CABO AS BALA CORRE GALERAAAA\nNarrador: eles morreram\n");
						acaboub = 1;
						break;
					}
					vida = vida- doeu; //tira vida
					balaspente--; //diminui quantidade de balas
					matou = 0;
					morreu = 0;
					
					if(vida<=0){
						printf ("MATEI ESSE OTARIO AQUI OOOHHH VAM PRO PROXIMO AMIGUES\n");
						matou = 1;
					}
					if (balaspente <= 0 && ttbalas >0 && matou == 0){ //precisa recarregar e nao matou
						printf ("SEGURA AI Q VO RECARREGA\n");
						ttbalas = ttbalas - pente;
						balaspente = pente;
					}
					else if (ttbalas<=0 && balaspente<=0 && matou !=1){
						printf ("CABO AS BALA CORRE GALERAAAA\nNarrador: eles morreram\n");
						acaboub = 1;
						break;
					}
				}
				if(acaboub==1){
					acaboub=0;
					break;	
				} 
				if(matou==1 && f2==bixos-1){ //se ja matou e nn tem mais bixos
					matou=0;
					printf ("todos os bixo morreram... parabens equipe!\n");
				}
			}
		}
	}
	return 0;
}

Desafio 2 – Cookies

Enunciado
Resolução
#include <stdio.h>
#include <string.h>
#define true 1

int main(){
    while(true){
        char utilizado[26]; //26 para abrigar o \0 no final caso o numero tenha 25 digitos
        char ideal[26];
        scanf("%s %s", utilizado, ideal);
        if(ideal[0] == '0') //caso de saida
            break;
        int certos = 0, quase = 0; //iniciando contadores de numeros certos na posicao certa e de certos na errada

        for(int i = 0; i < strlen(ideal); i++){ //loop para identificar os algarismos certos
            if(ideal[i] == utilizado[i]){
                certos++;
                utilizado[i] = '.'; //troco o caracter para nao contar erroneamente como um quase
                ideal[i] = ',';
            }
        }
        
        for(int i = 0; i < strlen(ideal); i++){ //loop fazendo uma varredura simples nos dois arranjos para contar os quase
            for(int j = 0; j < strlen(ideal); j++){
                if(ideal[i] == utilizado[j]){
                    quase++;
                    utilizado[j] = '.';
                    break; //depois de encontrar o numero posso sair do loop pois nao importa quantas vezes repete
                }
            }
        }

        if(certos == strlen(ideal)) //se a quantidade de certos eh o tamanho total do numero significa que eh igual
            printf("aqui estao seus cookies quentinhos\n");
        else if(strlen(ideal)-quase-certos > certos) //se errados (total menos certos menos quase) eh maior que certos
            printf("oh nao os cookies queimaram\n");
        else if(quase > certos) //se quase eh maior que certos
            printf("ta mole o.o\n");
        else //certos eh o maior mas nao estah 100% certo
            printf("meh, podia estar mais gostoso\n");
    }
}

Desafio 3 – Viva la Vida!

Enunciado
Resolução
#include <stdio.h>

void imprimeBebidas(int quantBebidas[]);
int calculaPessoasBebidas(int quantBebidas[]);

int main(){
    int N, M, quant, convidados, minQuant, maxQuant, resulBebidas, i, j, k;
    char bebida[10];
    int quantBebidas[3]; //0 uisque 1 vodca 3 cachaca

    scanf("%d", &N);
    for(k = 0; k<N; k++) {
        //zerando resultados
        quantBebidas[0] = 0;
        quantBebidas[1] = 0;
        quantBebidas[2] = 0;

        scanf("%d", &M);
        for(i = 0; i < M; i++) {
            //pegando nome da bebida e quantidade
            scanf(" %s %d", bebida, &quant);
            //se quantidade for 0 entao nao precisa add e tambem nao eh para imprimir
            if(quant != 0){
                switch(bebida[0]){
                    case 'U':
                        quantBebidas[0] += quant;
                        break;
                    case 'V':
                        quantBebidas[1] += quant;
                        break;
                    case 'C':
                        quantBebidas[2] += quant;
                        break;
                }
                imprimeBebidas(quantBebidas);
            }
        }
        //le convidados
        scanf(" %s %d", bebida, &convidados);
        resulBebidas = calculaPessoasBebidas(quantBebidas);

        //calcula min e max convidados
        minQuant = resulBebidas - (resulBebidas*0.1);
        maxQuant = resulBebidas + (resulBebidas*0.1);

        //sobrando
        if(convidados<minQuant){
            printf("Deu ruim!  Bebe bastante agua pessoal!\n");
        }
        //faltando
        else if(convidados>maxQuant){
            printf("TRAZ O COROTINHOOOOO\n");
        }
        //dentro dos limites
        else{
            printf("Viva la Vida!\n");
        }

    }
    return 0;
}

void imprimeBebidas(int quantBebidas[]){
    //so imprime como pede o enunciado
    printf("Uisque: %d; Vodca: %d; Cachaca: %d\n", quantBebidas[0], quantBebidas[1], quantBebidas[2]);
}

int calculaPessoasBebidas(int quantBebidas[]){
    //calcula a quantidade de pessoas baseado nos parametros do enunciado e nas quantidades de cada bebida
    return quantBebidas[0]*8 + quantBebidas[1]*6 + quantBebidas[2]*5;
}

Desafio 4 – Fabricando Chaves

Enunciado

Resolução
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char* procurasubs(char palavra[], int comeco, int fim){
    char* substring = malloc(sizeof(palavra));
    int i = comeco;
    int j = 0;
    while(i <= fim && j <= (fim-comeco)){
        substring[j] = palavra[i];
        i++;
        j++;
    }
    substring[j] = '\0';
    return substring;
}

int main(){
    int qtd;
    scanf("%i", &qtd);
    fflush(stdin);
    while(qtd > 0){
        char entradas[qtd][16];

        int i;
        for(i=0; i<qtd; i++){
            strcpy(entradas[i], "");
            scanf("%s", &entradas[i]);
            fflush(stdin);
        }

        i = 3; //i marcando o final da substring
        int maiorest = 0;
        for(i < strlen(entradas[0]);i++;){
            int mest = 0;
            int p = 0;
            //enquanto na primeira string existir um trecho que existe nas strings seguintes, p++. Atualiza o maior estágio de fechadura
            while(strstr(entradas[p], procurasubs(entradas[0], i-4, i)) != NULL && p < qtd){
                if(mest < strlen(strstr(entradas[p], procurasubs(entradas[0], i-4, i)))- 5)
                    mest = strlen(strstr(entradas[p], procurasubs(entradas[0], i-4, i)))- 5;
                p++;
            }
            //se a quantidade de estágios corretos são do tamanho da fechadura consolida o estágio maior para o tamanho da matriz
            if(p == qtd){
                maiorest = mest;
                break; //encerra o loop para preservar a localização em i e o maior estagio
            }
        }

        char* fechadura = procurasubs(entradas[0], i-4, i);

        char molde[maiorest][qtd];
        int n;
        for(n=0; n<qtd; n++){
            int g = 5;
            int c = maiorest-1;
            while(g < strlen(strstr(entradas[n], fechadura))){
                molde[c][n] = 'X';
                c--;
                g++;
            }
            while(g>= strlen(strstr(entradas[n], fechadura)) && c >=0){
                molde[c][n] = ' ';
                c--;
            }
        }

        int fin, fine;
        for(fin=0; fin<maiorest; fin++){
            for(fine=0; fine<qtd; fine++){
                printf("%c", molde[fin][fine]);
            }
            printf("\n");
        }
        fflush(stdin);
        scanf("%i", &qtd);
    }
    return 0;
}

Desafio 5 Extra – Cego cheio de tensão

Enunciado

Resolução
#include <stdio.h>

int main(){
    int n, tam;
    scanf("%i", &n); //numero de casos de teste
    while(n--){
        scanf("%i", &tam); //tamanho de cada caso de teste
        int v[tam];
        for(int i = 0; i < tam; i++){
            scanf("%i", &v[i]); //preenchendo o vetor com os valores de tensao
        }
        //apenas ignoro a conta que resultaria em Vm = Vmax*1
        int i;
        for(i = 0; i < tam; i++){
            if(v[i] < 120 || v[i] >= 300){ //caso nao seja seguro andar no local eu saio do loop
                break;
            }
        }
        if(i == tam) //caso tenha alcancado o final do loop significa que eh seguro andar
            printf("Vai na fe amigao\n");
        else //se caiu em algum momento antes deve tomar cuidado
            printf("oopa cuidado ai\n");
    }
    return 0;
}

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *