DESAFIO LOSANGO [OFF]
Este é um desafio de nÃvel fácil para treinamento de lógica. Vocês tem que criar um losango com as mesmas caracterÃsticas da imagem acima para uma entrada qualquer. Qualquer dúvida é só postar.
OBS: Quando a entrada for um número par, considere o próximo número como sendo a entrada.
Boa sorte!
Citação:Para números pares pode não dar muito certo. Mas a lógica é bem simples.
Será que alguém consegue resolver ainda hoje?
Citação::
Gostei da implementação. Parabéns!
Como você fez?
Edit: Agora está perfeito, com números pares e Ãmpares. O comportamento é diferente de um e de outro. Para números pares, o losango precisa começar(a primeira linha) com dois asteriscos, para Ãmpares, apenas 1. Estou fazendo também uso do método Reverse para tipos List<T>. A lógica é:
Uma interação for, começando do resto da divisão do número digitado(caso par, começa de 0, caso Ãmpar, começa de um). Isso faz com que o primeiro item seja [Ô]branco[Ô] para números pares e um asterisco para números Ãmpares. A interação for, não é de um em um, mas de dois em dois. Com isso, faço um List<T> de asteriscos, contendo o número de asteriscos correspondente ao Ãndice de cada interação. Isso é atingido com String([ô]*[ô], <número de asteriscos>). Assim, faço metade do losango, incluindo o maior número deles que é o valor digitado. Em seguida, crio uma segunda List<T> que conterá os mesmos Ãtens da primeira, exceto o último(o maior) mas em ordem invertida através do método Reverse, adicionando-os à primeira listagem, criando assim todos os Ãtens necessários para serem exibidos. Por último, simplesmente os exibo.
Citação:Como você fez?
static void exibirLosango(int t)
        {
            int inicio = t / 2;
            int fim = inicio;
            bool b = false;
            if (t % 2 == 0) t++;
            for (int x = 0; x < t; x++)
            {
                for (int y = 0; y < t; y++)
                {
                    if (y >= inicio && y <= fim)
                        Console.Write([Ô]*[Ô]);
                    else
                        Console.Write([Ô] [Ô]);
                }
                if (inicio == 0 && fim == t - 1)
                    b = true;
                if (b)
                {
                    inicio++;
                    fim--;
                }
                else
                {
                    inicio--;
                    fim++;
                }
                Console.WriteLine();
            }
        }
                using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            Console.WriteLine([Ô]Digite a entrada:[Ô]);
            string input = Console.ReadLine();
            if (int.TryParse(input,out i))
            {
                i = i % 2 == 0 ? i + 1 : i;
                DesenhaLosango(i);
            }
            else
            {
                Console.WriteLine([Ô]Você não colocou um número válido. Aà complica...[Ô]);
            }
            Console.ReadKey(true);
        }
        private static void DesenhaLosango(int numeroLinhas)
        {
            int quantidadeAsterisco = 1;
            int quantidadeEspacos = (int)Math.Truncate(Convert.ToDecimal(numeroLinhas) / 2m);
            int metade = quantidadeEspacos;
            for (int i = 1; i <= numeroLinhas; i++)
            {
                string linha = string.Concat(new string([ô] [ô], quantidadeEspacos), new string([ô]*[ô], quantidadeAsterisco));
                Console.WriteLine(linha);
                int k = i <= metade ? 1 : -1;
                quantidadeEspacos -= k;
                quantidadeAsterisco += k * 2;
            }
        }
    }
}Segue a minha implementação...
Citação::
Versão melhorada. Quando especificado um número par, poderia ficar desalinhado, agora qualquer número inteiro vai fazer o losango ficar certinho.
Edit: Agora está perfeito, com números pares e Ãmpares. O comportamento é diferente de um e de outro. Para números pares, o losango precisa começar(a primeira linha) com dois asteriscos, para Ãmpares, apenas 1. Estou fazendo também uso do método Reverse para tipos List<T>. A lógica é:
Uma interação for, começando do resto da divisão do número digitado(caso par, começa de 0, caso Ãmpar, começa de um). Isso faz com que o primeiro item seja [Ô]branco[Ô] para números pares e um asterisco para números Ãmpares. A interação for, não é de um em um, mas de dois em dois. Com isso, faço um List<T> de asteriscos, contendo o número de asteriscos correspondente ao Ãndice de cada interação. Isso é atingido com String([ô]*[ô], <número de asteriscos>). Assim, faço metade do losango, incluindo o maior número deles que é o valor digitado. Em seguida, crio uma segunda List<T> que conterá os mesmos Ãtens da primeira, exceto o último(o maior) mas em ordem invertida através do método Reverse, adicionando-os à primeira listagem, criando assim todos os Ãtens necessários para serem exibidos. Por último, simplesmente os exibo.
quando é par nao está começando com 1 Astérico, seria assim mesmo?