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

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

Статус
В этой теме нельзя размещать новые ответы.

AngelOfLove

Латентный кодер

AngelOfLove

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

Шифр Цезаря один из наиболее древнейших известных шифров. Схема шифрования очень про- ста - используется сдвиг буквы алфавита на фиксированное число позиций влево. Например, если сдвиг равен трем, то буква 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]
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу