Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador caesar. Mostrar todas as postagens
Mostrando postagens com marcador caesar. Mostrar todas as postagens

sábado, 30 de janeiro de 2021

URI (BEECROWD) - 1253 - Cifra de César - Strings - C

Plataforma: URI (BEECROWD)
Problema1253

Enunciado:
Júlio César usava um sistema de criptografia, agora conhecido como Cifra de César, que trocava cada letra pelo equivalente em duas posições à Esquerda no alfabeto (por exemplo, 'C' vira 'A', 'T' vira 'R', etc.). Ao começo do alfabeto nós voltamos para o fim, isto é 'A' vira 'Y'. Nós podemos, é claro, tentar trocar as letras com quaisquer número de posições.

Linguagem: C


Solução:

#include <stdio.h>

int main() {
    int n, i = 0, j, chave, tamanho;
    char *palavra = (char *) malloc(sizeof(char) * 50);;
    char alfabeto[26][27] = {
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "ZABCDEFGHIJKLMNOPQRSTUVWXY",
        "XZABCDEFGHIJKLMNOPQRSTUVWX",
        "XYZABCDEFGHIJKLMNOPQRSTUVW",
        "WXYZABCDEFGHIJKLMNOPQRSTUV",
        "VWXYZABCDEFGHIJKLMNOPQRSTU",
        "UVWXYZABCDEFGHIJKLMNOPQRST",
        "TUVWXYZABCDEFGHIJKLMNOPQRS",
        "STUVWXYZABCDEFGHIJKLMNOPQR",
        "RSTUVWXYZABCDEFGHIJKLMNOPQ",
        "QRSTUVWXYZABCDEFGHIJKLMNOP",
        "PQRSTUVWXYZABCDEFGHIJKLMNO",
        "OPQRSTUVWXYZABCDEFGHIJKLMN",
        "NOPQRSTUVWXYZABCDEFGHIJKLM",
        "MNOPQRSTUVWXYZABCDEFGHIJKL",
        "LMNOPQRSTUVWXYZABCDEFGHIJK",
        "KLMNOPQRSTUVWXYZABCDEFGHIJ",
        "JKLMNOPQRSTUVWXYZABCDEFGHI",
        "IJKLMNOPQRSTUVWXYZABCDEFGH",
        "HIJKLMNOPQRSTUVWXYZABCDEFG",
        "GHIJKLMNOPQRSTUVWXYZABCDEF",
        "FGHIJKLMNOPQRSTUVWXYZABCDE",
        "EFGHIJKLMNOPQRSTUVWXYZABCD",
        "DEFGHIJKLMNOPQRSTUVWXYZABC",
        "CDEFGHIJKLMNOPQRSTUVWXYZAB",
        "BCDEFGHIJKLMNOPQRSTUVWXYZA"
    };
    scanf("%d ", &n);
    
    while (i++ < n) {
        scanf("%s", palavra);
        scanf("%i", &chave);
        
        tamanho = 0;
        while (palavra[tamanho] != '\0')
            tamanho++;

        j = 0;            
        while (j < tamanho) {
            palavra[j] = alfabeto[chave][palavra[j] - 'A'];
            j++;
        }
        
        printf("%s\n", palavra);
    }
    
    return 0;
}

URI (BEECROWD) - 1253 - Cifra de César - Strings - C++ - Solução Alternativa

Olá!

O problema resolvido hoje é o da Cifra de César. Dessa vez, mais uma solução alternativa! Aqui contendo todos os alfabetos possiveis a serem considerados na resposta, que são 26.

Essa tabela de alfabetos que mencionei (e você verá abaixo, na minha solução) é conhecida em criptografia como "tabula recta". Sabia disso?

Eu gosto de resolver problemas assim, e você? Conte nos comentários!


Plataforma: URI (BEECROWD)
Problema1253

Enunciado:
Júlio César usava um sistema de criptografia, agora conhecido como Cifra de César, que trocava cada letra pelo equivalente em duas posições à Esquerda no alfabeto (por exemplo, 'C' vira 'A', 'T' vira 'R', etc.). Ao começo do alfabeto nós voltamos para o fim, isto é 'A' vira 'Y'. Nós podemos, é claro, tentar trocar as letras com quaisquer número de posições.

Linguagem: C++


Solução:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int n, i = 0, j, chave, tamanho;
    string palavra;
    string alfabeto[26] = {
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "ZABCDEFGHIJKLMNOPQRSTUVWXY",
        "XZABCDEFGHIJKLMNOPQRSTUVWX",
        "XYZABCDEFGHIJKLMNOPQRSTUVW",
        "WXYZABCDEFGHIJKLMNOPQRSTUV",
        "VWXYZABCDEFGHIJKLMNOPQRSTU",
        "UVWXYZABCDEFGHIJKLMNOPQRST",
        "TUVWXYZABCDEFGHIJKLMNOPQRS",
        "STUVWXYZABCDEFGHIJKLMNOPQR",
        "RSTUVWXYZABCDEFGHIJKLMNOPQ",
        "QRSTUVWXYZABCDEFGHIJKLMNOP",
        "PQRSTUVWXYZABCDEFGHIJKLMNO",
        "OPQRSTUVWXYZABCDEFGHIJKLMN",
        "NOPQRSTUVWXYZABCDEFGHIJKLM",
        "MNOPQRSTUVWXYZABCDEFGHIJKL",
        "LMNOPQRSTUVWXYZABCDEFGHIJK",
        "KLMNOPQRSTUVWXYZABCDEFGHIJ",
        "JKLMNOPQRSTUVWXYZABCDEFGHI",
        "IJKLMNOPQRSTUVWXYZABCDEFGH",
        "HIJKLMNOPQRSTUVWXYZABCDEFG",
        "GHIJKLMNOPQRSTUVWXYZABCDEF",
        "FGHIJKLMNOPQRSTUVWXYZABCDE",
        "EFGHIJKLMNOPQRSTUVWXYZABCD",
        "DEFGHIJKLMNOPQRSTUVWXYZABC",
        "CDEFGHIJKLMNOPQRSTUVWXYZAB",
        "BCDEFGHIJKLMNOPQRSTUVWXYZA"
    };
    cin >> n;
    cin.ignore();
    
    while (i++ < n) {
        getline(cin, palavra);
        cin >> chave;
        cin.ignore();
        
        tamanho = 0;
        while (palavra[tamanho] != '\0')
            tamanho++;

        j = 0;            
        while (j < tamanho) {
            palavra[j] = alfabeto[chave][palavra[j] - 'A'];
            j++;
        }
        
        cout << palavra << endl;
    }
    
    return 0;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas