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

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

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

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

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

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

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

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

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

9
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 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
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 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
1552 / 484 / 164
Регистрация: 12.03.2016
Сообщений: 1,823
Завершенные тесты: 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
17756 / 11781 / 2448
Регистрация: 24.12.2010
Сообщений: 23,681
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
17756 / 11781 / 2448
Регистрация: 24.12.2010
Сообщений: 23,681
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
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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