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)
Problema: 2591
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.
#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; }
#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; }
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)