Зашифровать исходное предложение используя треугольник Паскаля - C#
Формулировка задачи:
C клавиатуры вводится предложение, слова в котором разделены символом ‘_’. Используя треугольник Паскаля зашифруйте исходное предложение по правилу:
- Из предложения выделяется слово;
- Из треугольника Паскаля выбирается строка с номером равным числу букв в слове;
- К-я буква исходного слова заменяется на букву, отстоящую от исходной на число букв, ука-занное в к-м столбце выбранной строки треугольника.
Решение задачи: «Зашифровать исходное предложение используя треугольник Паскаля»
textual
Листинг программы
// Подготовка данных // Факториал const int MAX = 21; long[] fact = new long[MAX]; fact[0] = fact[1] = 1; for (int i=2; i<fact.Length; i++) { fact[i] = checked(i * fact[i-1]); } // Треугольник Паскаля var pascalTriangle = new int[MAX][]; for (int n=0; n<MAX; n++) { pascalTriangle[n] = new int[n+1]; for (int k=0; k<=n; k++) { checked { long combination = fact[n] / (fact[k] * fact[n - k]); pascalTriangle[n][k] = (int)combination; } } } // Шифрование const string ABC = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; string text = "ШИРОКАЯ_ЭЛЕКТРИФИКАЦИЯ_ЮЖНЫХ_ГУБЕРНИЙ_ДАСТ_МОЩНЫЙ_ТОЛЧОК_ПОДЪЁМУ_СЕЛЬСКОГО_ХОЗЯЙСТВА"; WriteLine(text); var sb = new StringBuilder(text.Length); foreach (string oneWord in text.Split('_')) { int[] pascalRow = pascalTriangle[oneWord.Length-1]; if (sb.Length > 0) sb.Append("_"); for (int i=0; i<oneWord.Length; i++) { char ch = oneWord[i]; int idx = ABC.IndexOf(ch); Debug.Assert(idx != -1, string.Format("Letter '{0}' is absent", ch)); ch = ABC[(idx + pascalRow[i]) % ABC.Length]; sb.Append(ch); } } text = sb.ToString(); WriteLine(text);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д