1253 - Cifra de César
Um problema bem simples envolvendo código ASCII, capaz de ser resolvido em dois segundos: RCTCDGPUXQEGVTCFWBKWKUUQCIQTCXCKNCFCTCE
Descrição
Solução
Basta fazer um for deslocando cada letra as posições para esquerda (lembre-se que a descrição diz como que criptografa, aqui a gente quer descriptografar). Daí, só utilizar o seguinte artifício para deslocar uma letra x
para esquerda dentro do intervalo [0,25]
, ou seja, no intervalo de 'A'
a 'Z'
:
Esquerda(x) = ((ASCII(x) - ASCII('A') - deslocamento + 26) % 26) + ASCII('A')
Dê uma olhada nas páginas Tabela ASCII e Deslocar dentro de um intervalo [0, N - 1] para entender por que essa operação acima funciona. Ao final teremos um número no intervalo [0,25]
onde basta adicionarmos novamente o código ASCII da letra A para descobrirmos a letra resultante do deslocamento.
#include <string.h>
#include <stdio.h>
int main(){
char alfabeto[51];
int N, deslocamento;
scanf("%d\n", &N);
for(int i = 0; i < N; ++i){
scanf("%[^\n]\n", &alfabeto);
scanf("%d\n", &deslocamento);
for(int j = 0; j < strlen(alfabeto); ++j){
alfabeto[j] = ((alfabeto[j] - 'A' - deslocamento + 26) % 26) + 'A';
}
printf("%s\n", alfabeto);
}
return 0;
}
Last updated
Was this helpful?