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?