Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
asdfre
1 / 1 / 1
Регистрация: 01.03.2017
Сообщений: 26
1

Найти все возможные комбинации четырех букв

02.04.2017, 17:30. Просмотров 561. Ответов 9
Метки нет (Все метки)

Есть задача с 4 буквами.A,B,C,D нужно найти все возможные комбинации этих букв.
Комбинации если я не путаю не чего считаются так А=1*2*3*4=24
Вот только как реализовать это на языке с++ не знаю.так как только начал его изучение.
Буду признателен за подсказку или решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2017, 17:30
Ответы с готовыми решениями:

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

Все возможные комбинации из 4 цифр
Доброго времени суток! Прошу помочь с такой задачей: Пользователь вводит...

Все возможные комбинации длины k из 0 и 1
Как бы это реализовать? Подкиньте идей или может есть готовая у кого-то. Ввод...

Все возможные комбинации из 10 цифр по n
есть 10 цифр, нужно написать программу, где вводишь n-кол-во чисел в...

Все возможные комбинации 5 чисел
В общем задача такая: Нужно, чтобы программа выдавала все возможные комбнации...

9
obivan
Падаван С++
425 / 243 / 84
Регистрация: 11.11.2014
Сообщений: 875
Завершенные тесты: 2
02.04.2017, 17:39 2
asdfre, реализовать формулу размещения

Anm = http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{n!}{(n-m)!}
0
asdfre
1 / 1 / 1
Регистрация: 01.03.2017
Сообщений: 26
02.04.2017, 17:40  [ТС] 3
это нужно вызвать функцию math получается?я просто пока мало знаком с языком,только начал изучение
0
obivan
Падаван С++
425 / 243 / 84
Регистрация: 11.11.2014
Сообщений: 875
Завершенные тесты: 2
02.04.2017, 17:42 4
asdfre, в вашем случае n = 4 и m = 4 и по сути задача сводится к нахождению факториала, на форуме есть много тем по поводу этого

Добавлено через 58 секунд
asdfre,
Цитата Сообщение от asdfre Посмотреть сообщение
это нужно вызвать функцию math получается
нет стандартной функции вычисления факториала нет, ее нужно самому реализовать, или реализовать функцию этой формулы
0
asdfre
1 / 1 / 1
Регистрация: 01.03.2017
Сообщений: 26
02.04.2017, 18:31  [ТС] 5
спасибо попробую разобраться)

Добавлено через 24 минуты
Нашел решение.
Переделал его под себя
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// next_permutation example
#include <iostream>     // std::cout
#include <algorithm>    // std::next_permutation, std::sort
using namespace std;
int main () {
  char myints[] = {'A','B','S','D'};
 
  sort (myints,myints+4);
 
  
  do {
    cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' ' << myints[3]<< '\n';
  } while ( std::next_permutation(myints,myints+4) );
 
}
Подскажите я правильно понимаю что тут все основные действия выполняет sort?
1
Manowar
1572 / 509 / 171
Регистрация: 12.03.2016
Сообщений: 1,942
Завершенные тесты: 1
02.04.2017, 18:41 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
 
int main() {
 
    std::string str = "ABCD";
    do
        std::cout << str << std::endl;
    while (std::next_permutation(str.begin(), str.end()));
    system("pause");
}
sort располагает в порядке возрастания (если не принципиально можно убрать).
0
Байт
Эксперт C
18925 / 12143 / 2533
Регистрация: 24.12.2010
Сообщений: 24,721
02.04.2017, 18:42 7
asdfre, Вам нужно получить количество перестановок? Тогда да, надо считать факториал. 4! = 24
Или вам нужно генерировать все 24 перестановки? Получить 24 строки типа ABCD, ABDC, ACBD, ... DCBA ?
Тогда поищите "Генерация перестановок" Было на форуме, было...
Цитата Сообщение от asdfre Посмотреть сообщение
все основные действия выполняет sort?
Действий вообще тут никаких нет.
0
asdfre
1 / 1 / 1
Регистрация: 01.03.2017
Сообщений: 26
02.04.2017, 18:57  [ТС] 8
нужно сгенерировать все 24 перестановки ABCD
Хорошо спасибо поищу еще
0
Байт
Эксперт C
18925 / 12143 / 2533
Регистрация: 24.12.2010
Сообщений: 24,721
02.04.2017, 19:55 9
asdfre, Вам в посте 6 уже дали вполне рабочий вариант. Но он использует метод класса string - next_permutation, который именно и дает следующую перестановку, пока все они не исчерпаются. А вам нужно все сделать все в стиле чистого Си?

Добавлено через 43 минуты
asdfre, вот, покопался по сусекам
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
#include <stdio.h>
#define N 4
 
main()
{ char s[N+1], t; int i, j, r, k;
 
 strcpy(s, "ABCD");
 while(1) {
   cout <<  s << endl;
       // Находим самое правое место, где s[i] < s[i+1]
   for(i=N-1; i>=0 && s[i] > s[i+1]; i--) ;
   if (i<0) break; // Уже получили "DCBA" - самую старшую перестановку
       // Находим s[j] - наименьший элемент справа от s[i] и больший его
   for(j=N-1; s[i] > s[j]; j--) ;
       // Меняем s[i] <-> s[j]
   t = s[j];
   s[j] = s[i];
   s[i] = t;
       // То, что за "i" - переворачиваем
   for(k=i+1, r=N-1; r > k; k++, r--) {
     t = s[r];
     s[r] = s[k];
     s[k] = t;
   }
 }
}
0
asdfre
1 / 1 / 1
Регистрация: 01.03.2017
Сообщений: 26
03.04.2017, 00:10  [ТС] 10
Цитата Сообщение от Байт Посмотреть сообщение
asdfre, Вам в посте 6 уже дали вполне рабочий вариант. Но он использует метод класса string - next_permutation, который именно и дает следующую перестановку, пока все они не исчерпаются. А вам нужно все сделать все в стиле чистого Си?

Добавлено через 43 минуты
asdfre, вот, покопался по сусекам
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
#include <stdio.h>
#define N 4
 
main()
{ char s[N+1], t; int i, j, r, k;
 
 strcpy(s, "ABCD");
 while(1) {
   cout <<  s << endl;
       // Находим самое правое место, где s[i] < s[i+1]
   for(i=N-1; i>=0 && s[i] > s[i+1]; i--) ;
   if (i<0) break; // Уже получили "DCBA" - самую старшую перестановку
       // Находим s[j] - наименьший элемент справа от s[i] и больший его
   for(j=N-1; s[i] > s[j]; j--) ;
       // Меняем s[i] <-> s[j]
   t = s[j];
   s[j] = s[i];
   s[i] = t;
       // То, что за "i" - переворачиваем
   for(k=i+1, r=N-1; r > k; k++, r--) {
     t = s[r];
     s[r] = s[k];
     s[k] = t;
   }
 }
}
Спасибо!

Добавлено через 3 минуты
извиняюсь за оффтоп,
но пользуюсь случаем,хотел бы спросить,насколько хороша данная книга "Алгоритмы Руководство по разработке. Стивен Скиена" Для общего понимания работы алгоритмов?
0
03.04.2017, 00:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2017, 00:10

Нужно вывести все возможные возрастающие 6-ти значные комбинации
Задачка: Нужно вывести все возможные возрастающие 6-ти значные комбинации из...

Вывести все возможные комбинации цепочек в матрице смежности
Есть матрица смежности вида: AB0 BCD DD0 CKN NE0 KB0 Т.е. если в конце...

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


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

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

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