Pesquisar este blog

Livros Recomendados

terça-feira, 19 de dezembro de 2023

URI (BEECROWD) - 2591 - HameKameKa - Strings - C, C++ e Haskell

Olá! Novo post de Strings! E novamente resolvido em três linguagens, que são C, C++ e Haskell.

E fica o pedido para que ajudem o blog, a chave PIX é 6d8bc7a8-5d74-493a-ab7a-3515baf35956. 

Valeu e até a próxima!


Plataforma: URI (BEECROWD)

Problema2591

Enunciado:
O Hamekameka foi inventado por Mestre Hame praticado por cinquenta anos antes de conhecer Kogu. Chamando sua energia latente nas palmas de suas mãos, Hame consegue lançar um raio explosivo de energia. Kogu aprende após ver Mestre Hame usando-o para apagar as chamas na casa de um Rei. Para a surpresa de Hame, Kogu consegue performar a técnica de primeira, embora seja apenas forte o suficiente para destruir o carro que Chamya deu para Mulba. Kogu descobriu que há um padrão na pronúncia correta deste ataque, de modo que, se não for pronunciado corretamente, o mesmo não acontece.

Escreva um programa que, dada a parte inicial de um Hamekameka, faça a finalização ideal para que o ataque seja realizado com sucesso.

Linguagem: C, C++ e Haskell


Solução: 

A solução é basicamente multiplicar a quantidade de "a" das duas partes da string que podem repetir esta letra. Portanto, basta contar os dois valores e multiplicá-los. Assim, sabe-se a quantidade de "a" que é necessário escrever na saída, fazendo isso com um laço de repetição.

Código em C:

#include <stdio.h>
size_t obtemTamanho(const char* s) {
	int i = 0;
	while (s[i] != '\0')
		i++;
	return i;
}

int main() {
	int n;
	char palavra[210];
	scanf("%d", &n);
	while (n--) {
		scanf("%s", palavra);
		int p1 = 1, p2 = 1, i = 2;
		while (palavra[i] == 'a') {
			i++;
			p1++;
		}
		i = obtemTamanho(palavra) - 4;
		while (palavra[i] == 'a') {
			i--;
			p2++;
		}
		printf("k");
		int resposta = p1 * p2;
		for (int i = 0; i < resposta; i++)
			printf("a");
		printf("\n");
	}
	return 0;
}


Código em C++:

#include <iostream>
#include <string>

int main() {
	int n;
	std::string palavra;
	std::cin >> n;
	while (n--) {
		std::cin >> palavra;
		int p1 = 1, p2 = 1, i = 2;
		while (palavra.at(i) == 'a') {
			i++;
			p1++;
		}
		i = palavra.size() - 4;
		while (palavra.at(i) == 'a') {
			i--;
			p2++;
		}
		std::cout << "k";
		int resposta = p1 * p2;
		for (int i = 0; i < resposta; i++)
			std:: cout << "a";
		std::cout << std::endl;
	}
	return 0;
}


Código em Haskell:

main :: IO ()
main = do
   n <- readLn
   reading n

obtemQuantidade :: [Char] -> Int -> Int
obtemQuantidade [] _ = 0
obtemQuantidade (x:xs) n
   | x == 'm' = n
   | otherwise = obtemQuantidade xs (n+1)

reading :: Int -> IO ()
reading n = do
   if n == 0
      then return ()
      else do
         palavra <- getLine
         let tamanho = length palavra
         let parte1 = obtemQuantidade palavra (-1)
         let quantidade = parte1 * (tamanho - parte1 - 6)
         putStrLn ("k" ++ replicate quantidade 'a')
         reading (n-1)

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas