Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
4 / 4 / 1
Регистрация: 23.05.2013
Сообщений: 37

Полный перебор чисел массива

21.12.2013, 04:13. Показов 10434. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вам времени суток.
Количество элементов массива задавать вручную - собственно N.
Массив заполняется числами от 1 до N.
Стоит задача, выполнить полный перебор массива чисел с первым элементов равным 1.

То есть:
Задаем массив из, допустим, 4 элементов, на выходе должны получить:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2

Если массив из 5 элементов, чисел и итераций будет соответственно больше, а именно 24.
А из 3 элементов получим всего 2.
1 2 3
1 3 2

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
40
41
#include <iostream>
 
using namespace std;
 
int fact=1, f;
int n, i, j;
void factorial(int f)
{
        for(i=0; i<n-1; i++)
        {
            fact=fact*f;
            f=f-1;
        }
    cout<<endl<<"факториал = "<<fact<<endl;
}
 
int main()
{
    cout<<"введите n: ";
    cin>>n;
 
    f=n;
    factorial(f);
 
    int i1;
    i1=fact/n;
 
    cout<<"количество итераций = "<<i1<<endl<<endl;
 
    int a[n];
    for(i=1; i<=i1; i++)
    {
 
        for(j=1; j<=n; j++)
        {
            a[j]=j;     //просто для примера, должно быть что-то другое
            cout<<a[j];
        }
        cout<<endl;
    }
}
Проблема заключается в том что не могу придумать как именно сделать этот перебор...
И потому на выходе пока получаю:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

Надеюсь на вашу помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2013, 04:13
Ответы с готовыми решениями:

Полный перебор
Дано множество целых чисел. Требуется разбить множество на две части суммы элементов которых равны. Если нельзя провести разбиение, выдать...

Полный перебор
Здравствуйте. Скорее всего, я пришел не по адресу и мне следовало бы задать свой вопрос где-нибудь в разделе алгоритмов, но не суть. Я всё...

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

4
44 / 44 / 9
Регистрация: 01.02.2012
Сообщений: 823
21.12.2013, 08:37
можно использовать функцию next_permutation из библиотеки algorithm:
C++ Скопировано
1
2
3
4
5
do
{
тут выводим массив
}
while(next_permutation(a+1, a+n);
1
4 / 4 / 1
Регистрация: 23.05.2013
Сообщений: 37
21.12.2013, 09:45  [ТС]
Цитата Сообщение от max777alex Посмотреть сообщение
можно использовать функцию next_permutation из библиотеки algorithm:
C++ Скопировано
1
2
3
4
5
do
{
тут выводим массив
}
while(next_permutation(a+1, a+n);
Боюсь, что в моем случае его применить нельзя.
Это лишь начальная часть программы, и в дальнейшем она будет распараллеливаться на 2 и 4 процесса.
А применив "next_permutation" я не представляю как можно будет выполнить распараллеливание.
Так что видимо надо прямо ручками цикл перебора делать
0
44 / 44 / 9
Регистрация: 01.02.2012
Сообщений: 823
21.12.2013, 09:52
тогда можно рекурсивно перебирать

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
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <vector>
 
using namespace std;
 
const int n = 5;
int a[n];
 
void f(int ind, int used)
{
    if(ind == n)
    {
        for(int i = 0; i < n; ++i)
            cout << a[i] << " " ;
        cout << endl;
        return;
    }
 
    for(int i = 2; i < n + 1; ++i)
    {
        if(used & (1 << i))
            continue;
        a[ind] = i;
        f(ind + 1, used | (1 << i));
    }
}
 
 
int main()
{
    a[0] = 1;
    f(1, 1);
    return 0;
}
1
4 / 4 / 1
Регистрация: 23.05.2013
Сообщений: 37
21.12.2013, 10:03  [ТС]
Цитата Сообщение от max777alex Посмотреть сообщение
тогда можно рекурсивно перебирать
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <vector>
 
using namespace std;
 
const int n = 5;
int a[n];
 
void f(int ind, int used)
{
    if(ind == n)
    {
        for(int i = 0; i < n; ++i)
            cout << a[i] << " " ;
        cout << endl;
        return;
    }
 
    for(int i = 2; i < n + 1; ++i)
    {
        if(used & (1 << i))
            continue;
        a[ind] = i;
        f(ind + 1, used | (1 << i));
    }
}
 
 
int main()
{
    a[0] = 1;
    f(1, 1);
    return 0;
}
Премного благодарствую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2013, 10:03
Помогаю со студенческими работами здесь

Перебор сумм чисел массива
Собственно по одному предмету делаю курсач, и хотелось бы себя наверняка перепроверить, да и попрактиковать лишний раз C++. Нужно...

Методы поиска: полный перебор и интерполяционный
Найти самолет, вылетающий в 1400. Методы поиска: полный перебор и интерполяционный. как это в массиве записать?

Перебор массива и поиск повторяющихся чисел
День добрый, подскажите пожалуйста, задача следующая, имеем массив {1,2,3,9,4,5,6,9,7,8,0}, тут девятка встречается два раза, необходимо...

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

Найти в последовательности натуральных чисел все пары чисел дающие в произведении полный куб
Напишите эффективную по времени программу, находящую в последовательности натуральных чисел не превосходящих 50 все пары чисел, дающие в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер