Реализовать шифрование перестановками

Предмет: информатика (программирование на языке C++)
Раздел: алгоритмы и структуры данных (перестановки, шифрование)
Задача: Реализовать шифрование перестановками.
Пояснение задачи:
  1. Задается натуральное число \( k \), которое указывает количество элементов в каждой группе для шифрования текста.
  2. Задается последовательность натуральных чисел \( c_1, c_2, ..., c_k \), представляющая перестановку чисел от \(1\) до \(k\). Эта перестановка определяет, как менять порядок символов в по k символов текста.
  3. Текст делится на группы по \( k \) символов. Если в последней группе меньше символов, недостающие места заполняются пробелами.
  4. Для каждой группы применяется перестановка, замещающая текущие символы на основе указанных номеров.
Пример:
  • Пусть \( k = 5 \), и задана перестановка 3, 2, 4, 5, 1.
  • Группа символов "абвгд" заменяется на "вбгда" согласно данной перестановке.
Алгоритм:
  • Разбиваем текст на группы по \( k \) символов.
  • Применяем перестановку к каждой группе.
  • Если последняя группа меньше \( k \) символов, добавляем пробелы.
Решение на языке C++:
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// Функция для шифрования одной группы символов
string encryptGroup(const string& group, const vector<int>& perm, int k) {
    string encryptedGroup(k, ' '); // Инициализируем пустую строку длиной k
    for (int i = 0; i < k; ++i) {
        if (i < group.size()) {
            encryptedGroup[i] = group[perm[i] - 1]; // Применяем перестановку
        }
    }
    return encryptedGroup;
}

int main() {
    // Входные данные
    int k; // Размер группы
    cout << "Введите размер группы k: ";
    cin >> k;

    vector<int> perm(k); // Перестановка
    cout << "Введите перестановку: ";
    for (int i = 0; i < k; ++i) {
        cin >> perm[i];
    }

    cin.ignore(); // Чтобы игнорировать остаток после ввода чисел
    string text;
    cout << "Введите текст для шифрования: ";
    getline(cin, text);

    // Процесс шифрования (код продолжается...)
Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн