Dificuldade na para entender a lógica de um algorítimo

Bom tarde, estou iniciando meus estudos no qual um amigo está me incentivando.
Porém faz algum tempo que ele me passou um algorítimo só que não estou conseguindo resolver, talvez seja burro demais hehe. Mas é o seguinte.

Eu digito dois números, o primeiro tem que ser maior que o segundo.

O primeiro é o tamanho do list, o segundo funciona como um número que vou utilizar para remover os itens da lista.

Exemplo:

num1 = 9
num2 = 2

Meu list vai ficar 1, 2, 3, 4, 5, 6, 7, 8, 9, certo?

O meu laço precisa percorrer a list e remover dados correspondente ao num2, ou seja, na primeira passada pelo list ele precisa remover o 2, 4, 6 e 8. Só que até ai tudo bem, então depois eu preciso retornar no inicio da lista e continuar removendo de 2 em 2, até que sobre apenas 1 número, como o último número removido foi o 8, e tinha o 9 após, o 9 conta como + 1 índice então do 9 ele volta pro início da lista e conta + 1 (do número 1) que vem a ser o valor do num2 que dai eu removo também, no final deveria ficar assim

1, 2, 3, 4, 5, 6, 7, 8, 9
3,5,7,9
3,7
3

Eu não preciso mostrar toda a sequencia na tela, apenas o último número.

Estou quebrando a cabeça a alguns dias e agora meu último recurso foi pedir ajuda.
Alguma alma bondosa poderia me dar uma mãozinha na explicação como eu poderia fazer?
Apenas como eu posso fazer e não o código pronto pois eu quero aprender. E não sei se estou postando no lugar correto, se não for gostaria que me indicassem qual lugar devo postar.

Obrigado a quem tentar ajudar.

Olá!

Então, resumidamente, parece que o seu problema é como tratar um item removido da lista.

Você tem que se atentar de que quando você remove um item da lista, toda estrutura da lista é modificada. Todos os itens da lista são “alocados” em um índice inferior, e um laço que percorre e ao mesmo tempo remove, deve ser precavido a isso.

Abaixo um trecho de código do que estou dizendo, veja se te ajuda:

for(int i = 0; i < lista.lenght ; i++){
   
    // no seu caso, você comparou múltiplos do segundo número informado.
    // Aqui, estou fazendo uma comparação semelhante
    if(lista[i].equals(numeroDeComparacao * i)){
          lista.RemoveAt(i);
          // O item foi removido: você deve ajustar a variável que percorre a lista. 
         // Neste exemplo, irei "zerá-la" novamente.
          i = 0;
    }

}

Bom dia Joaquim, o meu problema é continuar contando os índices corretamente após percorrer uma vez a lista. Vou deixar um exemplo:

Suponhamos que eu tenha digitado o primeiro número 9 e o segundo 2 no primeiro exemplo:

O segundo número serve como um contador de indices, ou seja, a cada 2 eu vou remover 1 número.

1 2 3 4 5 6 7 8 9 —> lista
1 2 1 2 1 2 1 2 1 (nessa segunda linha eu estou fazendo um contador para que conte quantos indices preciso andar para chegar no segundo valor digitado)

1 3 5 7 9 —> (nessa linha o 9 já tinha 1, portando o 2 é o proximo número da
2 1 2 1 2 sequencia, o número 1 do inicio da lista)

3 7 —> (como o último número, ou seja o 9, foi retirado, ele recomeça a contagem do
1 2 primeiro número da lista)

3 —> nessa linha a quantidade de números é menor que o 2, termina aqui.

Então agora fica o segundo exemplo com o número 8 sendo digitado primeiro e o 2 depois:

1 2 3 4 5 6 7 8 —> Lista
1 2 1 2 1 2 1 2 —> Contador

1 3 5 7
1 2 1 2

1 5
1 2

1

Não sei se estou conseguindo me expressar direito. Mas creio que esteja entendível isso hehe.
Abraço e obrigado pela resposta.

iorbech,

ficou bem confusa essa sua última explicação.

qual o enunciado do problema?

Não existe enunciado, ele me passou de cabeça mesmo.
Mas a lógica a seguinte.

Se eu digito o primeiro número como o 9. E o segundo o 2.

Ele vai criar uma lista de 9 elementos, de 2 em 2 (isso varia de acordo ao segundo numero digitado, se fosse digitado 3 ele iria de 3 em 3), então de 2 em 2 ele removeria o valor correspondente ao indice que se encontra ou seja, vou fazer outro exemplo igual aos do outro post, em cima vai ser a lista com 9 elementos e em baixo vou contar os indices, sempre que eu chego ao valor do segundo numero digitado, eu zero esse contador e removo outro item, sempre quando estiver o número 2 abaixo do numero da lista significa que esse numero está sendo removido.

1 2 3 4 5 6 7 8 9
1 2 1 2 1 2 1 2 1 >> Note que o 9 fica com indice 1, então eu vou ter que voltar no inicio da lista e o número 1 vai somar + um no contador de indice, que vai ser o 2, logo ele vai ser removido também

1 3 5 7 9
2 1 2 1 2 <<<< aqui o 1 aparece ainda para mostrar que ele está sendo removido, o 9 no exemplo aqui de cima tinha o contador 1 então quando retornar ao inicio da lista. contador++ = 2 … que removo o 1 e os outros numeros que estejam dentro da condição.

ficando:

3 7 >>> a cima o 9 tinha 2… ele retona ao inicio da lista como 1… o 7 fica com o contador 2, é removido e sobra o 3
1 2

finalizando assim com apenas o 3…

entendeu?

ok. vamos por partes. Tente passar a ideia com um vocabulário mais simplificado, você está passando o que você já pensou ao tentar fazer.

[quote]Se eu digito o primeiro número como o 9. E o segundo o 2.

Ele vai criar uma lista de 9 elementos, de 2 em 2 (isso varia de acordo ao segundo numero digitado, se fosse digitado 3 ele iria de 3 em 3),[/quote]

“Criar uma lista de 9 elementos, de 2 em 2” quer dizer:

Criar um array de 9 elementos, e o valor de cada elemento ser incrementado até 2, iniciando-se em 1?

[quote]1 2 3 4 5 6 7 8 9
1 2 1 2 1 2 1 2 1[/quote]

o índice de um array inicia-se com 0. Não entendi nenhuma de suas representações deste tipo acima.
Assim, um array de 9 posições possui o índice de 0 a 8.

Novamente: Tente construir um enunciado do que é necessário fazer neste problema, que facilitará o entendimento tanto de minha parte quanto também a sua. Se você não consegue construir um enunciado do problema, você não vai estar seguro nem mesmo do que se tem que fazer.

Até agora, o que você pode passar, foi que você remove alguns itens de um array com base no índice deles mesmos.

Agora responda:

  • Qual a condição que o índice deve estar para ser removido?
  • Quais são as variantes utilizadas no processo? Você disse que são 2: o primeiro é o tamanho do array, e o segundo, o que representa?
  • Qual é o resultado esperado em determinada situação?

Não precisa, por enquanto, passar o que está acontecendo. Se quiser colar o código fonte aqui, fica mais fácil interpretar onde está o problema, ok? Cole o código com as tag [ CODE ]

Você tem que fazer o seguinte:

Além das variáveis que serão utilizadas para guardar o tamanho da lista e o padrão de como serão removidas (no seu exemplo, 9 e 2, respectivamente), você terá que declarar uma variável para guardar o tamanho da lista após as remoções e um pequeno índice, que deverá começar com o valor 1, que servirá para manter controle sobre quais elementos serão removidos.

Depois de criar a lista e popular as suas posições você terá que fazer um laço que irá checar se o tamanho atual da lista é igual ou maior que o padrão da remoção. Por exemplo, se a sua lista tem 9 elementos e vc quer remover os elementos que possuem o índice 2, tudo estará finalizado quando a sua lista tiver tamanho 1, certo? Ou seja, menor que 2, pois você não conseguirá remover mais nada.

Em seguida, você irá percorrer todas as posições do array. A cada iteração você irá checar se o seu índice (aquele criado com valor 1) possui o mesmo valor que a variável usada para saber qual o padrão das remoções. Caso esteja com o mesmo valor, coloque o valor dessa posição do array como 0 (ou o valor que preferir, desde que não seja igual a outros valores da lista), subtraia 1 do tamanho atual da lista (já que você acabou de “remover” o elemento), e volte o índice para o valor 1. Caso não esteja com o mesmo valor, apenas some 1 ao valor do índice.

Depois de percorrer o array, coloque o valor do tamanho da lista como o valor atual da mesma e remova (agora sim irá removê-los de fato) os elementos que você setou como 0 (ou o valor que vc tiver colocado).

Depois disso tudo, após o tamanho atual do array ser menor que o padrão de remoção (condição explicada acima) é só você dar um print no array e ser feliz.

Qualquer dúvida pode perguntar, pq não sei se ficou muito claro.

E essa é a maneira que eu fiz, devem existir outras mais simples hehehehehehe