2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
1

Генерация перестановок (перестановка букв)

26.10.2020, 18:15. Показов 1250. Ответов 15

Здравствуйте, нужна перестановка букв, а не чисел в генерации перестановок. Помогите пожалуйста
Вот мой код:
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
#include<iostream>
 
using namespace std;
 
void swap(int *a, int i, int j)
{
  int s = a[i];
  a[i] = a[j];
  a[j] = s;
}
bool NextSet(int *a, int k)
{
  int j = k - 2;
  while (j != -1 && a[j] >= a[j + 1]) j--;
  if (j == -1)
    return false;
  int n = k - 1;
  while (a[j] >= a[n]) n--;
  swap(a, j, n);
  int l = j + 1, r = k - 1;
  while (l < r)
  {
    swap(a, l++, r--);
  }
  return true;
}
void Print(int *a, int n)
{
  static int num = 1;
  cout.width(3);
  for (int i = 0; i < n; i++)
    cout << a[i] << " ";
  cout << endl;
}
int main() 
{
  int k, *a;
  cout << "k = ";
  cin >> k;
  a = new int[k];
  for (int i = 0; i < k; i++)
    a[i] = i + 1;
  a[1] = 1;
  Print(a, k);
  while (NextSet(a, k))
  {
    Print(a, k);
  }
  cin.get(); cin.get();
  return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2020, 18:15
Ответы с готовыми решениями:

Перестановка слов в строке согласно массиву перестановок
Вводится строка слов, разделенных пробелами (возможны лишние пробелы в начале и в конце строки и...

Генерация перестановок чисел от 1 до N
Данная программа выдает неверные данные при N=5 и более.Сдается мне что есть проблемы в сортировке....

Генерация перестановок. Что не так?
Подскажите, пожалуйста, почему не работает, эта программа должна генерировать все перестановки ...

Генерация перестановок с особым условием
Всем привет, дорогие участники форума! Недавно нашёл задачу, у нас есть 2 числа N, K (1 &lt;= K &lt; N &lt;=...

15
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 13:08 2
Цитата Сообщение от Egorka2000 Посмотреть сообщение
Здравствуйте, нужна перестановка букв, а не чисел в генерации перестановок. Помогите пожалуйста
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
void swap(char *a, int i, int j)
...............
 
bool NextSet(char *a, int k)
................
 
int main() 
{
  int k;
  std::cout << "k = ";
  std::cin >> k;
 
  char *a = new char[k + 1]{};
  for (int i = 0; i < k; i++)
    a[i] = 'A' + i;
  
  //a[1] = 1;
  //Print(a, k);
  std::cout << a << std::endl;
  while (NextSet(a, k))
  {
      std::cout << a << std::endl;
    //Print(a, k);
  }
  //cin.get(); cin.get();
  return 0;
}
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 13:41  [ТС] 3
oleg-m1973, всё отлично, но мне нужна перестановка из введённого вручную набора элементов
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 13:42 4
Цитата Сообщение от Egorka2000 Посмотреть сообщение
oleg-m1973, всё отлично, но мне нужна перестановка из введённого вручную набора элементов
Ну, введи их вручную, вместо
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
for (int i = 0; i < k; i++)
    a[i] = 'A' + i;
В чём проблема?
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 14:05  [ТС] 5
oleg-m1973, что-то не получается. Нужно чтобы получилось так как на скриншоте
Миниатюры
Генерация перестановок (перестановка букв)  
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 15:36  [ТС] 6
oleg-m1973, как это сделать не могу понять

Добавлено через 56 минут
oleg-m1973, помогите мне пожалуйста
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 17:08 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() 
{
     std::string a;
     std::cin >> a;
  
  std::cout << a << std::endl;
  while (NextSet(a.data(), a.size()))
  {
      std::cout << a << ", ";
    //Print(a, k);
  }
std::cout << std::endl;
  //cin.get(); cin.get();
  return 0;
}
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 17:22  [ТС] 8
oleg-m1973, Нужно изменять NextSet ?
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 17:23 9
Цитата Сообщение от Egorka2000 Посмотреть сообщение
oleg-m1973, Нужно изменять NextSet ?
Нет
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 17:24  [ТС] 10
oleg-m1973, у меня просто не компилируется
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 17:25 11
Цитата Сообщение от Egorka2000 Посмотреть сообщение
oleg-m1973, у меня не компилируется
Ну так покажи как сделал и покажи ошибки
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 17:29  [ТС] 12
oleg-m1973,
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
#include<iostream>
 
using namespace std;
 
void swap(char *a, int i, int j)
{
  int s = a[i];
  a[i] = a[j];
  a[j] = s;
}
bool NextSet(char *a, int k)
{
  int j = k - 2;
  while (j != -1 && a[j] >= a[j + 1]) j--;
  if (j == -1)
    return false; // больше перестановок нет
  int n = k - 1;
  while (a[j] >= a[n]) n--;
  swap(a, j, n);
  int l = j + 1, r = k - 1; // сортируем оставшуюся часть последовательности
  while (l < r)
  {
    swap(a, l++, r--);
  }
  return true;
}
void Print(int *a, int n)  // вывод перестановки
{
  static int num = 1; // номер перестановки
  cout.width(3); // ширина поля вывода номера перестановки
  for (int i = 0; i < n; i++)
    cout << a[i] << " ";
  cout << endl;
}
int main() 
{
     std::string a;
     std::cin >> a;
  
  std::cout << a << std::endl;
  while (NextSet(a.data(), a.size()))
  {
      std::cout << a << ", ";
    //Print(a, k);
  }
std::cout << std::endl;
  //cin.get(); cin.get();
  return 0;
}
Ошибки:
[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive] 41 строка
[Error] initializing argument 1 of 'bool NextSet(char*, int)' [-fpermissive] 11 строка
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 17:30 13
Цитата Сообщение от Egorka2000 Посмотреть сообщение
while (NextSet(a.data(), a.size()))
NextSet(&a[0], a.size())
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 17:39  [ТС] 14
oleg-m1973, а k как правильно добавить?
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.10.2020, 17:40 15
Цитата Сообщение от Egorka2000 Посмотреть сообщение
oleg-m1973, а k как правильно добавить?
Никак, она не нужна
0
2 / 2 / 0
Регистрация: 23.08.2020
Сообщений: 167
27.10.2020, 17:42  [ТС] 16
oleg-m1973, нужно чтобы так получилось
Миниатюры
Генерация перестановок (перестановка букв)  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2020, 17:42
Помогаю со студенческими работами здесь

Генерация массива всех перестановок из n элементов.
Нашел по этой теме здесь на форумах такой код: #include &lt;iostream.h&gt; int X; int N; void...

Генерация всех перестановок заданного множества
Никак не могу понять в чем проблема, задача состояла в генерации всех перестановок заданного...

Генерация всех перестановок n элементного множества
с++ 1) Напечатать все перестановки чисел от 1 до n используя рекурсивный алгоритм пример 123...

Функция перестановок букв с Pascal на С.
Здравствуйте всем. Помогите пожалуйста начинающему программисту на C. У меня есть...

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

Перестановка букв в слове
Дано слово . Переставить его первую букву на место последней. Вторую , третью ... последнюю букву...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru