Jump to content

Topas 2009 - exercício D


polska
 Share

Recommended Posts

Já agora, @mogers, e no caso do TOPAS 2009 , exercicio D, cuja tarefa e esta:

Pretende-se analisar uma sequência interacções de Ali Baba com o sistema biométrico da caverna e escrever um programa para determinar o número máximo de vezes seguidas que conseguiu abrir a porta sem dificuldades. O programa analisará um registo de ocorrências em que 1 1 designa abertura sem problemas e 1 0 um insucesso. Depois dum insucesso haverá sempre uma sequência de zero ou mais tentativas falhadas (cada uma representada por 0) que terminará por 1 (sucesso) ou por 2 (desistência). Cada linha de input apresenta uma ocorrência, com excepção da última linha que é sempre -1 -1. O output será uma linha com o valor pedido.

Se eu ler os dados assim:

#include <cstdio>
int main()
{
int tmp(0), conta(0), x, y;
for(; 
{
 scanf("%d %d", &x, &y);

 if(x == -1 && y == -1)
  break;
 if(x == 1 && y == 1)
  tmp++;
 else
 {
  if(tmp > conta)
conta = tmp;
  tmp = 0;
 }
}
printf("%d\n", conta);
return 0;
}

Vai dar mal, porque se eu introduzir um 1 apenas, a outra variavel fica na mesma com o valor que já tinha anteriormente e pode entrar nas comparações asseguir, contando soluções a mais...

Então leio como string com o fgets e faço as comparações:

#include <cstdio>
int main()
{
int tmp(0), conta(0), x, y;
char som[10];
for(; 
{
 fgets(som, sizeof(som), stdin);

 if(som[0] == '-');
  break;
 if(som[0] == '1' && som[2] == '1')
  tmp++;
 else
 {
  if(tmp > conta)
conta = tmp;
  tmp = 0;
 }
}
printf("%d\n", conta);
return 0;
}

Mas desta maneira, o primeiro input que dou entra sempre na primeira comparação ( if(som[0] == '-') ) e sai logo do for... apresentando 0, como óbvio, :s .

Por exemplo, introduzo 1 1, e ele em vez de falhar na condição não, entra e faz o break..

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Hmmm ... basicamente 'e contar as linhas seguidas "1 1", certo?

Sugiro-te que, de futuro, nao mistures problemas.

Este topico e do problema do gambozino. Devias ter feito outro topico para o ladrao.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Neste caso não me parece boa ideia usar o scanf a ler 2 elementos, podias simplesmente separar os estados do programa: enquanto abriu com sucesso lês 2 valores, enquanto está a falhar só lês 1 valor.

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

Hmmm ... basicamente 'e contar as linhas seguidas "1 1", certo?

Sugiro-te que, de futuro, nao mistures problemas.

Este topico e do problema do gambozino. Devias ter feito outro topico para o ladrao.

Penso que sim, a minha solução não foi aceite mas penso que seja só isso, a minha leitura de inputs é que esta mal e por isso falhou...

Eu só coloquei o problema aqui porque a minha questão se tratava de como ler o input, que era o que estava a ser discutido anteriormente..

🙂

Neste caso não me parece boa ideia usar o scanf a ler 2 elementos, podias simplesmente separar os estados do programa: enquanto abriu com sucesso lês 2 valores, enquanto está a falhar só lês 1 valor.

for(; 
{
 scanf("%d %d", &x, &y);

 if(x == -1 && y == -1)
 break;

 if(x == 1 && y == 0)
 {
 if(tmp > conta)
  conta = tmp;
 tmp = 0;
 while(scanf("%d", &x))
	if(x == 1 || x == 2)
	 break;
 }
 else
  tmp ++;
}

leu o input sem problemas, é isto que me disseste certo? 🙂

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.