algoritmo em Java que receba do usuário um número inteiro n ímpar e imprima a seqüência abaixo

O número n representa a quantidade de linhas a
serem impressas. Na seqüência abaixo, n = 7
Screenshot_1

Ola colega voce pode fazer da seguinte forma:

	Scanner scan = new Scanner(System.in);
	System.out.println("Informe um numero: ");
	int num = scan.nextInt();

	int contar = 0;

	if (num % 2 != 0) {
		for (int i = num; i > 1; i--) {

			contar = contar + i;

			System.out.println(contar);
		}

	}else {
		System.out.println("Este numero é Par");
	}

}

Aqui está um outro exemplo:

import java.util.Scanner;

public class Main {
  private static final Scanner scan = new Scanner(System.in);

  private static void print(final int n) {
    System.out.println("*".repeat(n));
  }

  private static int getNumber() {
    while (true) {
      try {
        System.out.print("Digite um número ímpar: ");

        final int n = Integer.parseInt(scan.nextLine());

        if (n % 2 == 1)
          return n;
      } catch (Exception e) {
        System.out.print("Só pode número! ");
      }
    }
  }

  public static void main(String... args) {
    final int n = getNumber();

    for (int i = 1; i < n; i += 2)
      print(i);

    print(n);

    for (int i = n - 2; i > 0; i -= 2)
      print(i);
  }
}

Se estiver usando uma versão do Java abaixo da 11, troque esta linha:

System.out.println("*".repeat(n));

Por esta:

System.out.println(new String(new byte[n]).replace("\0", "*"));
2 curtidas

Depende.

Repare na sequência, ela primeiro imprime 1 asterisco, depois 3, depois 5, depois 7, e em seguida “volta” para 5, 3 e 1.

E se n for um número par? Se ele for 6, por exemplo, você deve parar no 5 (1, 3, 5, 3, 1), ou deve ir até o 6 (1, 3, 5, 6, 5, 3, 1)? A segunda opção me parece estranha, por “quebrar” a aparente “lógica”, mas vai saber. A questão é que, sem definir bem o problema, será difícil dar uma resposta precisa. Tanto que as respostas acima verificam se o número é par e nesse caso só imprime uma mensagem de erro. É uma solução válida? Pode ser, mas sem a definição precisa do problema, qualquer resposta aqui (inclusive esta) será chute.

Pode parecer que estou sendo “rígido” demais, afinal, “é só um exercício”. Mas a ideia de exercícios é justamente… exercitar não só a programação em si, mas também o raciocínio a ser usado antes, durante e depois de escrever o código (que no fundo, é uma parte importantíssima da programação: pensar em vez de só sair fazendo). É por causa de detalhes assim que muitos problemas aparecem em sistemas reais: você vê um detalhe aparentemente besta, pensa “é óbvio que isso tem que ser assim” e sai fazendo. Se acertar, tudo bem, mas se errar…

Enfim, ignorando o fato do número poder - ou não - ser somente ímpar (que já explicaram como tratar acima), uma outra forma de fazer seria:

int n = // ler o número conforme já explicado pelas outras respostas
int incremento = 2; // incrementa de 2 em 2
for (int i = 1; i >= 1; i += incremento) {
    if (i >= n) // se chegou em n, começa a "voltar"
        incremento = -2;
    // imprime os asteriscos
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    // pula a linha
    System.out.println();
}

Mas isso considera que n é ímpar (se ele for 6, ainda sim imprimirá até o 7).

Se a lógica for outra (por exemplo, se só pode ir até 5 quando n é 6), aí teria que mudar o if:

int n = // ler o número
boolean par = n % 2 == 0; // verifica se é par
int incremento = 2; // incrementa de 2 em 2
for (int i = 1; i >= 1; i += incremento) {
    if (i >= n) { // se chegou em n, começa a "voltar"
        incremento = -2;
        if (par) { // se n for par
            i += incremento; // para não repetir (se n for 6 e não tiver esta linha, imprime 5 asteriscos duas vezes)
            continue; // vai para a próxima iteração (sem imprimir os asteriscos)
        }
    }
    // imprime os asteriscos
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    // pula a linha
    System.out.println();
}

Ou seja, agora se n for ímpar, funciona da mesma forma (por exemplo, para n = 7, imprime 1, 3, 5, 7, 5, 3, 1), mas se for par, só vai até o ímpar imediatamente anterior (por exemplo, para n = 6, imprime 1, 3, 5, 3, 1).


Enfim, defina o que fazer quando o número é par e ajuste a lógica de acordo (a ideia básica do restante permanece a mesma).

1 curtida

O título do tópico diz “ímpar”.
“um número inteiro n ímpar”