Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Selecionar o primeiro N maior que zero dessa sequência digitada?

Como faço para digitar o valor de A e vários valores para N seguidos na mesma linha, e o programa deve selecionar o primeiro N maior que zero dessa sequência digitada?

Exemplo de entrada (tudo digitado de uma vez só): 3 -25 -6 -10 2 Onde A = 3, e a partir daí o programa deve correr pelos outros valores até encontrar o primeiro valor maior que zero, no caso do exemplo N = 2

            int a, n, s = 0, contador = 0, contador1 = 0;
            string[] linha = Console.ReadLine().Split(' ');
            a = int.Parse(linha[0]);
            n = int.Parse(linha[1]);
            while(n <= 0)
            {
                n = int.Parse(linha[2]);
            }
            contador1 = a;
            while(contador < n)
            {
                contador++;
                s += contador1;
                contador1++;
            }

            Console.WriteLine(s);
            Console.ReadKey();
3 respostas
solução!

Olá, Emillyn. Tudo bom?

Perceba que em seu código, na linha n = int.Parse(linha[2]); do primeiro laço while, você fica eternamente neste laço caso o valor no índice 2 seja maior que 0! Afinal, n sempre guardará o valor de linha[2]!

Eu não entendi muito bem a implementação no while seguinte, você poderia me explicar?

contador1 = a;
while(contador < n)
{
    contador++;
    s += contador1;
    contador1++;
}

Tentei resolver este problema e postei a solução no meu GitHub aqui.

Você poderia dar uma olhada no meu código? De qualquer modo, o postei em outro lugar para tentarmos exercitar a lógica usada no seu algoritmo antes de termos a solução pronta :)

Bons estudos.

Olá Guilherme . O exercício pedia: Faça um algoritmo para ler um valor A e um valor N. Imprimir a soma de A para cada i com os valores (0 <= i <= N-1). Enquanto N for negativo ou ZERO, um novo N(apenas N) deve ser lido.

Coloquei esse while para somar os valores entre eles pela quantidade de números pedidos no caso o n, não sei se deu para entender bem. Link do exercicio: https://www.urionlinejudge.com.br/judge/pt/problems/view/1149

Bom dia, Emillyn.

Antes do código, vou mostrar minha interpretação, com base no exemplo do site:

Entrada: 3 2
Saída: 7

No exemplo, temos A = 3 e N = 2.

Precisamos agora, somar A para cada inteiro I no intervalo (0 <= i <= N-1). Fazendo a substituição da variável N, teremos o intervalo (0 <= i <= 1) e devemos realizar as operações abaixo, descritas em pseudo-código:

Soma = 0
// Para I = 0:
Soma += (3+0)
// Para I = 1:
Soma += (3+1)

Ao término da execução de nosso pseudo-código, teremos o valor esperado 7 para a variável Soma.

Tudo bem? Vejo que o maior desafio nos problemas do URI é a interpretação, eu mesmo demorei bastante para entender isto rsrs.

Agora, vamos ao código C#:

var entradaUsuario = Console.ReadLine();
var numeros = entradaUsuario.Split(' ');

var A = int.Parse(numeros[0]); // Converte o primeiro número e guarda em a
var N = 0;
var somaTotal = 0;

// Começamos com o indiceArray = 1, porque estamos pulando o primeiro valor (A)
// agora vamos buscar o valor de N, ou seja, o primeiro número positivo maior
// que 0.
for (var indiceArray = 1; indiceArray < numeros.Length; indiceArray++)
{
    var numeroAtual = int.Parse(numeros[indiceArray]);
    if(numeroAtual > 0)
    {
        N = numeroAtual;
        break; // Encontramos N! Podemos abandonar este laço de repetição!
    }
}

// Agora é o momento de realizar a soma de A com cada i no intervalo (0 <= i <= N-1).
for (int i = 0; i <= N-1; i++)
    somaTotal += (A + i);

Console.WriteLine(somaTotal);

Console.Read();

Tudo bem? Esclareci sua dúvida?