Pesquisar aqui

segunda-feira, 16 de dezembro de 2019

C++ - Desafio de Natal


O Natal e o Ano Novo aproximam-se e porque não dar-lhes as boas vindas completando um desafio em C++?

O objetivo é criar um programa que faz output da mensagem:
"Feliz Natal!Feliz 2020!"

Mas em vez de escrever direto, vai fazendo vários outputs, começando no carácter do meio ("!"), e a cada nova linha de output adicionando mais 1 carácter de cada lado, de modo a criar uma árvore de natal.
Ou seja, 1 carácter, 3 carácteres, 5 carácteres... Começando no centro.
    1
  212
32123

Se a mensagem fosse "hello", o programa faria:
     l
   ell
 hello

A última linha deve então conter a mensagem completa "Feliz Natal! Feliz 2020!".

Será que consegues?
Output esperado:
           !
          l!F
         al!Fe
        tal!Fel
       atal!Feli
      Natal!Feliz
      Natal!Feliz 
    z Natal!Feliz 2
   iz Natal!Feliz 20
  liz Natal!Feliz 202
 eliz Natal!Feliz 2020
Feliz Natal!Feliz 2020!

Minha solução:
#include <iostream>

using namespace std;

int main()
{
    string message = "Feliz Natal!Feliz 2020!";
    
    //A mensagem tem 23 carácteres, 11 para cada lado, um no meio
    
    //Loop principal (linha a linha)
    for(int i = 0; i < 12; i++){
        //Escrever os espaços (depende do número da linha)
        for(int space = 11; space > i; space--){
            cout << " ";
        }
        
        //Escrever os carácteres à esquerda do centro
        for(int left = i; left > 0; left--){
            cout << message[11-left];
        }
        
        //Escrever o "!", carácter central
        cout << message[11];
        
        //Escrever os carácteres à direita do centro
        for(int right = 1; right <= i; right++){
            cout << message[11+right];
        }
        
        //Finalizar a linha, criando uma nova em baixo
        cout << endl;
    }
}

O desafio e solução são de completa autoria minha.
Quaisquer dúvidas que tenham fico muito feliz por responder e ajudar!

Referências

Sem comentários:

Publicar um comentário

Comente de forma construtiva...

Nota: só um membro deste blogue pode publicar um comentário.