Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заменить строчные латинские гласные буквы на заглавные Построить программу, выводящую на экран введенную с клавиатуры строку, предварительно заменив строчные латинские гласные буквы на заглавные https://www.cyberforum.ru/ cpp-beginners/ thread2491634.html C++ Как пропускать каждые 3 элемента
Есть цикл отображения картинок, так как мне влом было высчитывать позиции на несколько строк вниз, я ограничился 2мя for (int i = rg; i <= rg2; i++) { if (i <= 3 || i >= 7 &&...
C++ Написать процедуру, которая ищет первых N максимальных чисел из массива https://www.cyberforum.ru/ cpp-beginners/ thread2491511.html
Сформировать меню вызова функций данной практики по их номеру через switch конструкцию. Результатом выхода из меню является ввод нуля: 1.Написать процедуру, которая ищет первых N максимальных...
C++ Как создать многопоточность Здравствуйте, Пытаюсь хотя бы на самом простом уровне понять, как работает std thread, для этого сделал вот такую простенькую задачку: То есть, имеется одномерный вектор с числами. Нужно... https://www.cyberforum.ru/ cpp-beginners/ thread2491474.html
C++ Оператор new работает не так как пишут и рассказывают в интернете
Добрый день! Недавно начал изучать с++, но напоролся на что-то не понятное. Все пишут что объявление динамического массива "type *name_arr = new type", но у меня выдает перегрузку. Можете пожалуйста...
C++ Как работает объект istream? https://www.cyberforum.ru/ cpp-beginners/ thread2491469.html
Есть кусок кода istream & operator>>(istream & is, String & st) { char temp; is.get(temp, String::CINLIM); if (is) st = temp; while (is && is.get() != '\n') continue;
C++ Рекурсия #include <iostream> #include <random> #include <time.h> #include <conio.h> #include <Windows.h> using namespace std; template <typename T> https://www.cyberforum.ru/ cpp-beginners/ thread2491460.html C++ Сжатие исходной последовательности символов
Не могу решить задачу. Помогите, пожалуйста. Разработать и испытать функцию “сжатия” исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких вхождений одного и...
C++ Проблема с картой в Mario Делаю копию Марио на C++ SFML!!! Но когда добавляю в Map.h новую строку, чтобы увеличить высоту карты, программа вылетает main.cpp: #include <SFML/Graphics.hpp> #include "View.h" #include... https://www.cyberforum.ru/ cpp-beginners/ thread2491436.html C++ Шифрование и дешифровка файла с AES 256 https://www.cyberforum.ru/ cpp-beginners/ thread2491429.html
Доброго времени суток, дорогие телепаты. Заранее оговорюсь: я в криптографии совсем зеленый, поэтому сильно не пинайте. Существует ли простой способ шифровки-расшифровки архива (в частности .rar или...
C++ Подключение заголовочных файлов
Как работает подключение заголовчных файлов в Линукс во время компиляции? К примеру имею свой собственный заголовочный файл test.h и подключил его в main.cpp #include "test.h", теперь чтобы...
C++ Повторное подключение хэдеров https://www.cyberforum.ru/ cpp-beginners/ thread2491411.html
Здравствуйте! Тяжело объяснить проблему, но я попробую. Например, в главном исходном файле я подключаю iostream для ввода/вывода. Далее создаю свой хэдер: пишу определение класса, пишу в нём...
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 2
0

Случайным образом сгенерировать массив символов алфавита - C++ - Ответ 13774170

16.08.2019, 13:23. Показов 1913. Ответов 13
Метки (Все метки)

Добрый день!
Необходимо поместить случайный символ алфавита в каждый элемент массива char[26], причем:
  • Нельзя заменить элемент самим собой, т. е. первой не может быть буква A;
  • Нельзя использовать одну и ту же букву несколько раз, т. е. если выбрана буква S, она больше не может встретиться в массиве.
Подозреваю, что использую кривой подход, помогите, пожалуиста, разобраться с логикой алгоритма:
На каждом шаге алгоритма создаю возможный пул символов pool размером [range].
Убираю из пула запрещенный порядковый элемент (A на первом шаге, B на втором и т. д.) и сдвигаю элементы влево.
Функцией rand() генерирую символ, затем также исключаю его из пула, элементы сдвигаются влево.
Исключенный порядковый элемент возвращается в пул, элементы сдвигаются вправо.
Итерация повторяется, пока в пуле не останется единственное возможное значение.
Вот мой код (для простоты тестирую пока на 10 буквах):
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// crypt_rand_test.cpp -- двигаем массив
#include <iostream>
#include <cstdlib>
#include <ctime>
const char order_letters[10] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};      // константный массив букв для сравнения
int main()                                                                                             //  с порядковым эл-том
{
    using namespace std;
    const int NUM_LETTERS = 10;
    char pool[NUM_LETTERS] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
    char CRYPT[NUM_LETTERS];
    for (int range = NUM_LETTERS; range > 0; range--)
    {
        cout << endl << "STEP " << (NUM_LETTERS - range);
        for (int order = 0; order < range - 1; order ++)
        {
            if (pool[order] == order_letters[NUM_LETTERS - range])
            {
                for (int i = NUM_LETTERS - range; i < range - 1; i++)               // сдвиг влево на эл-т, убираем из пула
                {                                                                                          // запрещ. порядковый эл-т
                    char temp = pool[i];
                    pool[i] = pool[i+1];
                    pool[i+1] = temp;
                }
                break;
            }
        }
        cout << endl << "allowed pool: " << endl;
        for (int j = 0; j < range - 1; j++)
            cout << pool[j] << "\t";
        srand(time(0));                                    // генерация случ. эл-та
        int index_rand = rand() % (range - 1);
        CRYPT[NUM_LETTERS - range] = pool[index_rand];
        cout << endl << "random from pool: " << pool[index_rand]
        << " [ " << index_rand << " ] "<< endl;
 
        for (int j = range - 1; j > NUM_LETTERS - range; j--)           // сдвиг вправо на эл-т, возвращ. на место 
        {                                                                                     // запрещ. порядк. эл-т
            char temp = pool[j-1];
            pool[j-1] = pool[j];
            pool[j] = temp;
        }
        if (index_rand > 0)
            index_rand += 1;                                                 // (index + 1 т. к. до этого сдвигали и нарушили нумерацию)
        for (int rand = 0; rand < range - 1; rand++)
        {
            if (pool[rand] == pool[index_rand])
            {
                for (index_rand; index_rand < range; index_rand ++)    // удаляем запрещенный выбранный эл-т
                {                                                                                // сдвиг влево  
                    char temp = pool[index_rand];
                    pool[index_rand] = pool[index_rand + 1];
                    pool[index_rand + 1] = temp;
                }
                break;
            }
        }
        cout << endl << "pool except random: " << endl;
        for (int j = 0; j < range - 1; j++)
            cout << pool[j] << "\t";
    }
    cout << endl << "Our CRYPT massiv: " << CRYPT << endl;
    return 0;
}

Заранее спасибо за ответ.


Вернуться к обсуждению:
Случайным образом сгенерировать массив символов алфавита C++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2019, 13:23
Готовые ответы и решения:

Случайным образом сгенерировать массив из 20 чисел (в заданном диапазоне)
Создать программу на С++, в которой случайным образом генерируется массив из 20 чисел (в диапазоне...

Структуры. Создать массив из 10 точек, сгенерировать случайным образом координаты и массы
люди, у меня осталось одно задание: Структурный тип содержит поля: координаты х,у и массу...

Создать матрицу А(nxn), сгенерировать елементы случайным образом
Создать матрицу А(nxn), сгенерировать елементы случайным образом. Вычеслить индексы елементов...

Нужно сгенерировать элементы массива случайным образом с помощью функции rand
Нужно сгенерировать элементы случайным образом с помощью функции rand. Определить индексы...

13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2019, 13:23

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сгенерировать случайным образом многочлен P(x) степени N и найти интеграл P(x) от a до b для заданных a и b
Сгенерировать случайным образом многочлен P(x) степени N и найти интеграл P(x) от a до b для...

Переставить строку из рандомных 16 символов 256 раз случайным образом
Здравствуйте. Помогите пожалуйста! Нужна программа для рандомного переставления букв в различных 16...

Массив: Заполнить массив из 10 элементов случайным образом в интервале (0..3).
Заполнить массив из 10 элементов случайным образом в интервале (0..3). Например:...

Заполнить массив случайным образом
Добрый день!!! Ребята, объясните пожалуйста, как выполнить такую задачу!!! По возможности,...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.