Anonimo1 0 Denunciar post Postado Fevereiro 19, 2014 Preciso de ajuda com o seguinte problema: Proteja sua senha Olimpíada Brasileira de Informática 2004 Fonte: http://br.spoj.com/problems/SENHA/ Por questões de segurança, muitos bancos hoje em dia estão alterando a forma como seus clientes digitam as senhas nos caixas eletrônicos, pois alguém pode postar-se atrás do cliente e ver as teclas à medida que ele as digita. Uma alternativa bastante utilizada tem sido associar os dez dígitos a cinco letras, de forma que cada letra esteja associada a dois dígitos, conforme o exemplo abaixo: | | | | | | | | | | | | | | | | | 1 | | | 3 | | | 0| | | 5| | | 2 | | | | | | | | | | | | | | | | | A | -- | | B | -- | | C | -- | | D | -- | | E| -- | | | | | | | | | | | | | | | | | | 7 | | | 9 | | | 8 | | | 6 | | | 4 | |___|___| |___|___| |___|___| |___|___| |___|___| As associações entre números e letras são mostradas como botões numa tela sensível ao toque, permitindo que o cliente selecione os botões correspondentes à senha. Considerando a disposição dos botões da figura acima, a senha 384729 seria digitada como BCEAEB (note que a mesma sequência de letras seria digitada para outras senhas, como por exemplo 982123). Cada vez que o cliente usa o caixa eletrônico, as letras utilizadas são as mesmas (de 'A’ a 'E’), com os botões nas mesmas posições, mas os dígitos são trocados de lugar. Assim, caso um intruso veja (mesmo que mais de uma vez) a sequência de letras digitada, não é possível notar facilmente qual a senha do cliente do banco. Tarefa Dada uma sequência de associações entre letras e números, e as letras digitadas pelo cliente do banco para cada uma dessas associações, você deve escrever um programa para determinar qual é a senha do cliente. Entrada A entrada é composta de vários conjuntos de testes. A primeira linha de um conjunto de testes contém um inteiro N, que indica o número de associações entre letras e números e as senhas digitadas (2 <= N <= 10). As N linhas seguintes contêm as entradas da seguinte forma: 10 dígitos, em ordem de associação, para as letras de 'A’ a 'E’ (2 dígitos para a letra A, 2 para a B e assim sucessivamente) e 6 letras que representam a senha codificada conforme os dígitos anteriores. As N associações fornecidas em um conjunto de testes serão sempre suficientes para definir univocamente a senha do cliente. O final da entrada é indicado por N = 0. Exemplo de Entrada 2 1 7 3 9 0 8 5 6 2 4 B C E A E B 9 0 7 5 8 4 6 2 3 1 E C C B D A 3 0 1 2 3 4 5 6 7 8 9 B C D D E E 1 3 5 4 6 8 7 9 0 2 E B C D C D 3 2 0 4 5 9 7 6 8 1 A C D D E C 0 Saída Para cada conjunto de teste da entrada, seu programa deve produzir três linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n é numerado sequencialmente a partir de 1. A segunda linha deve conter a senha do cliente, com um espaço após cada dígito. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente. Exemplo de Saída Teste 1 3 8 4 7 2 9 Teste 2 2 5 6 7 8 9 (esta saída corresponde ao exemplo de entrada acima) Restrições 2 <= N <= 10 (N = 0 apenas para indicar o fim da entrada) Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Fevereiro 19, 2014 E o que tentou fazer? Compartilhar este post Link para o post Compartilhar em outros sites
Anonimo1 0 Denunciar post Postado Fevereiro 19, 2014 Eu fiz isso, porém não está imprimindo a senha correta: #include <stdio.h> #include <stdlib.h> #include<time.h> #define N 10 int main() { int i,j,l,aleatorio[10],aleatorio1[12],n,k,status,cont=0,ok,nook; char senha[6],s[6],opcao; printf("Digite o numero de interacoes que deseja realizar:"); scanf("%d",&n); srand(time(NULL)); for(k=0;k<n;k++) { for (i = 0; i < N; ++i) { do { aleatorio = rand() % N; status = ok; for (j=0;j<i;++j) if (aleatorio == aleatorio[j]) status = nook; } while (status == nook); printf("%d ", aleatorio); } printf("\n"); printf(" A B C D E\n"); fflush(stdin); printf("Digite a sua senha:"); scanf("%c",&senha); opcao = senha; } for(l=0;l<6;l++); { for(i=0;i<n;i++); { switch(opcao) { case 'A': aleatorio1 = aleatorio; cont = i; case 'B': aleatorio1 = aleatorio; cont = i; case 'C': cont = i; aleatorio1 = aleatorio; case 'D': cont = i; aleatorio1 = aleatorio; case 'E': cont = i; aleatorio1 = aleatorio; } if (cont == i) printf("%d",aleatorio1); } } system("pause"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites