С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
1

Комбинаторика

27.12.2013, 12:47. Показов 1434. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите написать алгоритм для вычисления количество непустых последовательностей из ряда чисел. Или кинте ссылочку, где почитать.
Что я имею ввиду?
Пример :
Входные данные : 1 3 3 4
решение:
1 3 3 4
1 3 4
1 3
1 4
1
3 3 4
3 4
3 3
3
4
Вывод: 10.

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.12.2013, 12:47
Ответы с готовыми решениями:

Комбинаторика
Здравствуйте все. В данный момент дпополнительно решил заняться комбинаторикой, столкнулся с...

Комбинаторика на С++
Нужно составить программу, или скорее функцию, которая для заданного натурального числа k выводит...

Комбинаторика
Доброго всем времени суток!Помогите пожалуйста с решением такой задачи.Дана последовательность...

Комбинаторика
Доброго времени суток. Недавно на олимпиаде была такая задача, дано длина строки состоящая из...

12
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 14:18 2
Цитата Сообщение от NillK Посмотреть сообщение
последовательностей из ряда чисел
подпоследовательностей м.б ?

Добавлено через 1 минуту
почему то мне кажется это будет 1+2+3+4 (зависит от длины начального ряда)

Добавлено через 14 минут
а нет мое предположение бред
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.12.2013, 16:09 3
Что-то логики не видно:
Цитата Сообщение от NillK Посмотреть сообщение
Входные данные : 1 3 3 4
решение:
1 3 3 4
1 3 4
1 3
1 4
1
а почему нет: 1 3 3 ?
1
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
27.12.2013, 17:00  [ТС] 4
Пропустил, значит там ответ 11
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.12.2013, 17:33 5
NillK, Разве здесь не будет 16 вариантов. Тогда получается формула размещение 2n
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.12.2013, 17:57 6
Ну не знаю, может что типа такого:
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
#include <iostream>
#include <algorithm>
#include <set>
 
int main()
{
   std::string s = "1334";
   //std::sort(s.begin(), s.end());
 
   size_t number;
   std::set<size_t> numbers;
   do {
      number = std::stoi(s);
      numbers.insert(number);
      while (number /= 10)
         numbers.insert(number);
   } while (std::next_permutation(s.begin(), s.end()));
 
   std::cout << "Count: " << numbers.size() << "\n";
   for (size_t i : numbers) std::cout << i << "\n";
 
   std::cout << "\n\nDone." << std::endl;
   return 0;
}
Добавлено через 3 минуты
Кликните здесь для просмотра всего текста
Count: 34
1
3
4
13
14
31
33
34
41
43
133
134
143
313
314
331
334
341
343
413
431
433
1334
1343
1433
3134
3143
3314
3341
3413
3431
4133
4313
4331
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
27.12.2013, 18:22 7
NillK, расскажите подробнее об исходной последовательности. есть ли какие-то ограничения, например, может ли быть исходная последовательность такой: 3134 или она должна быть неубывающей (есть одна идея, но она будет работать только для неубывающих последовательностей).

Добавлено через 1 минуту
DiffEreD, нет, порядок чисел в последовательности важен, его нельзя менять
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.12.2013, 19:18 8
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
void createMask(int n, bool *mask, const int &size);
 
int main(int argc, char const *argv[])
{
    int arr[] = {1, 2, 3, 4};
    int i, j; int n = (sizeof(arr) / sizeof(arr[0]));
    int stop = 1 << n;
    bool mask[n];
 
    for ( i = 0; i < stop; ++i )
    {
        createMask(i, mask, n);
        for ( j = 0; j < n; ++j )
        {
            if (mask[j]) cout << arr[j] << " ";
        }
        cout << endl;
    }
 
    return 0;
}
 
void createMask(int n, bool *mask, const int &size)
{
    int const radix = 2;
    int i = 0;
    memset(mask, 0, size);
    while ( n >= radix )
    {
        mask[i++] = n % radix;
        n /= 2;
    }
    mask[i] = n % radix;
}
Кликните здесь для просмотра всего текста


1
2
1 2
3
1 3
2 3
1 2 3
4
1 4
2 4
1 2 4
3 4
1 3 4
2 3 4
1 2 3 4
1
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
27.12.2013, 23:11  [ТС] 9
Цитата Сообщение от XRoy Посмотреть сообщение
NillK, Разве здесь не будет 16 вариантов. Тогда получается формула размещение 2n
Важна последовательность, важна неповторяемость

Добавлено через 7 минут
Последовательность состоит из натуральных x, x принадлежит от 1 до 1 000 000, числа написаны через пробел, заранее известна длинна последовательности (вводится)

Добавлено через 8 минут
XRoy, при вводе повторяющихся чисел появляются ошибки.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2013, 23:45 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
#include <iostream>
#include <clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 6;
    int A[N];         // имеем множество A {1, ... N}
    for (int i = 0; i < N; i++)
        A[i] = i + 1; // заполняем множество
    int a[N] = {0};   // надо ли включать элемент множества
    int counter = 0;  // счетчик
    while (a[0] != 2) // пока не прошли все элементы
    {
        for (int i = 0; i < N; i++) // выводим подмножество
            if(a[i]) // если нужно печатать
                cout << A[i] << ' ';
        cout << endl;
 
        a[N-1]++; // увеличиваем последний разряд
        for (int i = N - 1; i > 0; i--) // если нужен сдвиг
            if(a[i] == 2) // увеличиваем след. разряд
            {
                a[i-1]++;
                a[i] = 0;
            }
        counter++; // увеличиваем счетчик на один
    }
    cout << "Всего подмножеств: " << counter << endl;
}
0
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
28.12.2013, 01:50  [ТС] 11
MrGluck, а как при этом он будет обрабатывать последывательность например такую: 2 1 2 3
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.12.2013, 01:58 12
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
#include <iostream>
#include <clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 4;
    int A[N] = {2, 1, 2, 3};
    int a[N] = {0};   // надо ли включать элемент множества
    int counter = 0;  // счетчик
    while (a[0] != 2) // пока не прошли все элементы
    {
        for (int i = 0; i < N; i++) // выводим подмножество
            if(a[i]) // если нужно печатать
                cout << A[i] << ' ';
        cout << endl;
 
        a[N-1]++; // увеличиваем последний разряд
        for (int i = N - 1; i > 0; i--) // если нужен сдвиг
            if(a[i] == 2) // увеличиваем след. разряд
            {
                a[i-1]++;
                a[i] = 0;
            }
        counter++; // увеличиваем счетчик на один
    }
    cout << "Всего подмножеств: " << counter << endl;
}
1
1 / 1 / 1
Регистрация: 22.11.2013
Сообщений: 35
28.12.2013, 02:21 13
Это может пригодиться?
0
28.12.2013, 02:21
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2013, 02:21
Помогаю со студенческими работами здесь

комбинаторика
Здравствуйте! Я решаю задачи по дискретной математике на языке С.В интернете масса примеров задач...

Комбинаторика
Дано множество U из 7 элементов, каким числом способов в нем можно выбрать подмножества А, В, С...

Комбинаторика
Даны 3 строки.Вывести все возможные комбинации,учитывая и те,в которых нет какой-либо строки

Комбинаторика
Написать программу, которая генерирует числа, содержащие k цифр (от 1 до 6), допускающие повторения...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru