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