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

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

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

Студворк — интернет-сервис помощи студентам
Помогите написать алгоритм для вычисления количество непустых последовательностей из ряда чисел. Или кинте ссылочку, где почитать.
Что я имею ввиду?
Пример :
Входные данные : 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 выводит все возможные произведения k чисел с...

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

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

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

Добавлено через 14 минут
а нет мое предположение бред
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.12.2013, 16:09
Что-то логики не видно:
Цитата Сообщение от NillK Посмотреть сообщение
Входные данные : 1 3 3 4
решение:
1 3 3 4
1 3 4
1 3
1 4
1
а почему нет: 1 3 3 ?
1
 Аватар для NillK
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
27.12.2013, 17:00  [ТС]
Пропустил, значит там ответ 11
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.12.2013, 17:33
NillK, Разве здесь не будет 16 вариантов. Тогда получается формула размещение 2n
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.12.2013, 17:57
Ну не знаю, может что типа такого:
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
NillK, расскажите подробнее об исходной последовательности. есть ли какие-то ограничения, например, может ли быть исходная последовательность такой: 3134 или она должна быть неубывающей (есть одна идея, но она будет работать только для неубывающих последовательностей).

Добавлено через 1 минуту
DiffEreD, нет, порядок чисел в последовательности важен, его нельзя менять
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.12.2013, 19:18
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
 Аватар для NillK
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
27.12.2013, 23:11  [ТС]
Цитата Сообщение от XRoy Посмотреть сообщение
NillK, Разве здесь не будет 16 вариантов. Тогда получается формула размещение 2n
Важна последовательность, важна неповторяемость

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

Добавлено через 8 минут
XRoy, при вводе повторяющихся чисел появляются ошибки.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2013, 23:45
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
 Аватар для NillK
0 / 0 / 1
Регистрация: 26.09.2013
Сообщений: 11
28.12.2013, 01:50  [ТС]
MrGluck, а как при этом он будет обрабатывать последывательность например такую: 2 1 2 3
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.12.2013, 01:58
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
Это может пригодиться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2013, 02:21
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru