• Начинающий хакер, спасибо что зашёл к нам! Для полного удобства рекомендуем Вам сразу же зарегистрироваться. Помните, необходимо придумать сложный пароль к своему логину, в котором будут присутствовать цифры, а так же символы. После регистрации вы сможете пользоваться чатом. Так же не забудьте активировать аккаунт через письмо, высланное вам на почту ! Администрация заботится о каждом из Вас...
  • Для просмотра разделов из категории Private Informations & Programms необходимо купить

Шифр цезаря C#

AngelOfLove

Латентный кодер
Топовый

AngelOfLove

Латентный кодер
Топовый
Регистрация
21 Фев 2017
Сообщения
219
Реакции
74
Баллы
3

Шифр Цезаря один из наиболее древнейших известных шифров. Схема шифрования очень про- ста - используется сдвиг буквы алфавита на фиксированное число позиций влево. Например, если сдвиг равен трем, то буква A заменяется на D, а буква z - на c. Вам дана зашифрованная строка s, состоящая только из латинских букв и пробелов и число K, на которое были сдвинуты буквы алфавита при шифровании.

Формат входных данных: В первой строке записано одно целое число K (|K| ⩽ 105). Во второй строке записана одна строка s, состоящая только из больших и маленьких латинских букв и пробелов. Длина строки не превосходит 106.

Формат выходных данных: Выведите с учетом регистра расшифрованную строку.

Стандартный ввод:
  • 15 - Xi xh ktgn wpgs egdqatb
  • 12 - Eaxhq Uf Iuft Rudq
  • 3 - Yhql ylgl ylfl Veni vidi vici
[HIDE]
Код:
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        int k = int.Parse(Console.ReadLine());                                     // Смещение влево на k букв
        string s = Console.ReadLine();                                             // Входная строка
        string rez = "";                                                           // Итог
        char min_A = (char)65;                                                     // Граница символов от A до Z
        char max_Z = (char)90;
        char min_a = (char)97;                                                     // Граница символов от a до z
        char max_z = (char)122;
        List<char> simb = new List<char> { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '-', '!', '?', ':', ';', '@',
            '#', '$', '%', '^', '&', '*', '(', ')', '_','"', '№', '_', '-', '+', '=', '<', '>', '\\', '/', '|', '~', '`', ' '};
                                                                                   // Список знаков, которые нельзя изменять
        if (Math.Abs(k) <= Math.Pow(10, 5))                                        // Проверка условия задачи на |k|<=10^5
            for (int i = 0; i < s.Length; i++)                                     // Сравниваем каждый символ строки
            {
                if (simb.Contains(s[i]))                                           // Если символ из строки есть в списке, то просто добавляем его
                    rez += s[i];
                else
                {
                    if (s[i] >= min_A && s[i] <= max_Z)                            // Если буква заглваная
                    {
                        if ((int)(s[i] - k) < min_A)                               // Если смещение выходит за границы A..Z
                        {
                            rez += (char)(max_Z - (k - ((int)s[i] - min_A + 1)));
                        }
                        else rez += (char)(int)((s[i]) - k);                       // Если нет, то добавляем заглавную букву
                    }
                    if (s[i] >= min_a && s[i] <= max_z)                            // Если буква строчная
                    {
                        if ((int)(s[i] - k) < min_a)                               // Если смещение выходит за границы a..z
                        {
                            rez += (char)(max_z - (k - ((int)s[i] - min_a + 1)));
                        }
                        else rez += (char)(int)((s[i]) - k);                       // Если нет, то добавляем строчную букву
                    }
                }
 
            }
        Console.WriteLine(rez);
        Console.ReadKey();
    }
}
[/HIDE]
 
Сверху Снизу