Зашифровать исходное предложение используя треугольник Паскаля - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы