Ваш вопрос подпадает под биномиальный коэффициент. Чтобы рассчитать общее количество уникальных комбинаций из 10 предметов, взятых по 2 за раз, по формуле N! / (K! (N - K)!) Можно использовать. Подключение 10 для N и 2 для K дает 45.
Я написал класс для обработки общих функций для работы с биномиальным коэффициентом, к которому относится данная проблема. Он выполняет следующие задачи:
Выводит все K-индексы в хорошем формате для любого N, выбирающего K, в файл. K-индексы могут быть заменены более описательными строками или буквами. Этот метод делает решение этого типа проблемы довольно тривиальным.
Преобразует K-индексы в соответствующий индекс записи в отсортированной таблице биномиальных коэффициентов. Этот метод намного быстрее, чем старые опубликованные методы, основанные на итерации Это делается с помощью математического свойства, присущего треугольнику Паскаля. Моя газета говорит об этом. Я считаю, что я первый, кто открыл и опубликовал эту технику, но я могу ошибаться.
Преобразует индекс в отсортированной таблице биномиальных коэффициентов в соответствующие K-индексы.
Использует Mark Dominus метод для вычисления биномиального коэффициента, который с гораздо меньшей вероятностью переполняется и работает с большими числами.
Класс написан на .NET C # и предоставляет способ управления объектами, связанными с проблемой (если таковые имеются), с использованием общего списка. Конструктор этого класса принимает значение bool, называемое InitTable, которое при значении true создаст общий список для хранения управляемых объектов. Если это значение равно false, таблица не будет создана. Таблицу не нужно создавать для выполнения 4 вышеуказанных методов. Методы доступа предоставляются для доступа к таблице.
Существует связанный тестовый класс, который показывает, как использовать класс и его методы. Он был тщательно протестирован с 2 случаями, и никаких известных ошибок нет.
Чтобы прочитать об этом классе и загрузить код, см. Таблицу биномиального коэффициента .
Нетрудно преобразовать этот класс в C ++.