Зашифровать исходное предложение используя треугольник Паскаля - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д