Ir para conteúdo
Fórum Script Brasil
  • 0

Sou iniciante, me tirem uma dúvida.


matheussouza12

Pergunta

Gente, eu tenho um exercicio pra resolver. Basicamente é o seguinte. Eu tenho que pegar uma lista, e retirar x números, que faça minha lista ter o maior número possivel. O a quantidade de números que vou precisar retirar vai ser dada. Exemplo

2

269810

Eu preciso que meu programa retire o número 2 e o 6. Eu só consegui fazer meu programa retirar os menores sempre, mas não é assim que se resolve. Alguém pode me dar uma ideia de como resolver?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Pra ficar mais claro o problema.

Juvenal e seu parceiro Leôncio estavam voltando para casa quando receberam uma ligação de Tobias, gerente do banco a qual são clientes. Tobias falou que houve um grande problema no saldo de usuários do banco: foram, acidentalmente, concatenados (em  posições aleatórias) inteiros em cada saldo e não existe um backup para se descobrir o valor antigo, mas o banco sabe quantos caracteres foram concatenados em cada saldo. 
Para resolver a situação o banco resolveu retirar caracteres do saldo. Juvenal, que não ia aceitar perder dinheiro, obrigou o banco a deixar o saldo o maior possível quando se retirassem os caracteres. 
Por exemplo, se eu sei que o saldo é 1435 e sabendo que existem 2 caracteres extras nesse saldo, posso concluir que devo apagar os números 1 e 3 para gerar o maior saldo possível: 45.
Leôncio conhece (superficialmente) os conceitos de Estruturas de Dados, logo precisa de sua ajuda para descobrir as maiores sequências possíveis que podem ser formadas ao se retirar caracteres.

Formato de Entrada

Vão existir vários casos de teste. (use endOfFile)
Cada caso é formado por A e B  1 <= B < A <= 10^5 seguido na linha abaixo por A caracteres (o primeiro digito nunca vai ser zero) que representam inteiros, B é a quantidade de dígitos que você deve apagar.

Formato de Saída

Imprima o maior saldo possível que pode existir depois da retirada de caracteres.
Exemplos

Entrada:

5 3
15342
3 1
123
2 1
11

Saída:

54
23
1

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

 

 

Sou iniciante em Python, mas acho que posso dar uma força . . .

 

Bom, você tem 2 dígitos importantes: [ 4 , 2 ]

 

- o primeiro diz a quantidade de dígitos existentes na sequencia

 

- o segundo a quantidade de dígitos a serem removidos da sequencia

 

Sendo o saldo da conta: 1435

 

Onde neste caso você deve deixar na sequencia os 2 maiores dígitos da sequencia ( 5 e 4 ) para que sejam utilizados para o maior saldo final possivel?

 

Mas isso deve obedecer alguma regra especifica?

 

Ex:

 

Na ordem original: 1435, o valor final do saldo seria 45 obedecendo o posicionamento original dos caracteres, ou deveria ser 54 obedecendo ao maior valor possível de se conseguir combinando todos os caracteres restantes?

 

- Caso seja a primeira opção:

 

Que é basicamente uma variação da segunda opção:

 

O que eu fiz aqui foi, criar um laço while que será executado enquanto uma variável de controle ( contagem ) for menor que a quantidade de dígitos a serem retirados da sequencia, neste caso 2.

 

Dentro do laço while, utilizei o método .remove(), para retirar da sequencia ( lista ) original o menor dígito encontrado na lista ( sequencia ) original, sendo que o processo se repetirá ate que a condição do laço seja atingida, 1 item a cada iteração, mas não alterando o posicionamento original dos elementos.

 

Obs.: Não esquecendo de adicionar 1 a variável de controle ( contagem ) antes de terminar o laço.

 

- Caso seja a segunda opção:

 

O que eu fiz aqui foi, criar um laço while que será executado enquanto uma variável de controle ( contagem ) for menor que a quantidade de dígitos a permanecerem na sequencia, neste caso 2.

 

Dentro do laço while, utilizei o método .append() para adicionar à uma nova lista ( sequencia ), o maior dígito encontrado na lista ( sequencia ) original, sendo que o processo se repetirá ate que a condição do laço seja atingida, 1 item a cada iteração.

 

Obs.: não esquecendo de após descobrir o maior digito da sequencia ( lista ) originaleliminá-lo da mesma, caso contrario a nova sequencia terá todos os seus elementos ( dígitos ) repetidos.

 

Obs.: Não esquecendo de adicionar 1 a variável de controle ( contagem ) antes de terminar o laço.

 

 

Dependendo da opção escolhida, o valor de retorno de:

 

[ 4 , 2 ]

1435

 

vai ser 45 para a primeira opção

 

vai ser 54 para a segunda opção

 

 

Bom por hora é só . . . não sei se é isso que procura mas está ai . . . sem contar que sou pessimo em Matematica, e combinando isso com a hora em que estou acordado e o fato de que sou iniciante em programação, é quase certo que não é a solução que voce procura!

 

 

Ubuntu 14.04 - Python 2.7.6 - Python 3.4.3

 

Espero Ter Ajudado ! ! !

Editado por Felipe222
Link para o comentário
Compartilhar em outros sites

  • 0

Felipe, obrigado pela sua disposição em ajudar. Seria a primeira opção, eu também fiz assim. Mas o problema, não é retirar os menores números, saca? Exemplo

6 2

269800

A saída deverá ser : 9800

Meu programa não deve retirar os menores números, ele deve retirar os números, cujo objetivo é deixar o maior número possivel, ficou confuso essa explicação, mas acho que deu pra entender.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...