Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 6

Перестановка без повторений

23.12.2016, 20:31. Показов 6701. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сгенерировать перестановку N чисел без повторений. Требуется использовать циклы. Функции пока не прошли.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2016, 20:31
Ответы с готовыми решениями:

Перестановка без повторений
Всем привет! У меня возникла небольшая проблема при написании программы, буду благодарна за любую помощь. Задание гласит следующее:...

Сочетание без повторений
Нужно вывести все возможные комбинации из 37 цифр без повторений. Тоисть необходимо что бы вывело все комбинации (по 6 цифр) из заданых 37...

Рандом без повторений
Здравствуйте! Искал по форуме, но так и не нашел подходящее решение такой задачи: пользователь вводит К ПРИМЕРУ число 7. я беру от него...

10
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2016, 20:37
Лучший ответ Сообщение было отмечено Студент ИБ как решение

Решение

Студент ИБ, спуститесь вниз этой страницы. Может быть найдете чего подходящее...
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.12.2016, 20:41
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
#include <iostream>
#include <clocale>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 4;
    int A[N]; // имеем множество A {1, ... N}
    int counter = 0; // счетчик числа перестановок
    for (int i = 0; i < N; i++) // заполняем множество
        A[i] = i + 1;
    // sort(A, A + N); // необходимо при вводе произвольных элементов
    do
    {
        for (int i=0; i < N; i++)
            cout << A[i] << ' ';
        cout << endl;
        counter++;
    } while (next_permutation(A, A + N));
    cout << "Всего перестановок: " << counter << endl;
    return 0;
}
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <clocale>
 
using namespace std;
 
// вывод множества на экран
void print(const int *A, const int size);
// функция перестановки двух чисел
void swap(int &, int &);
// функция генерации следующей перестановки
void next_perm(int k, int *A, const int size, int &counter);
 
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 4;
    int A[N]; // имеем множество A {1, ... N}
    int counter = 0; // счетчик числа перестановок
    for (int i = 0; i < N; i++) // заполняем множество
        A[i] = i + 1;
    next_perm(0, A, N, counter);
    cout << "Всего перестановок: " << counter << endl;
    return 0;
}
 
void print(const int *A, const int size)
{
    for (int i=0; i < size; i++)
        cout << A[i] << ' ';
    cout << endl;
}
 
void swap(int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
 
void next_perm(int k, int *A, const int size, int &counter)
{
    // если заполнилось
    if (k == size)
    {
        print(A, size);
        counter++;
        return;
    }
 
    for(int i = k; i < size; i++)
    {
        swap(A[k], A[i]);
        next_perm(k + 1, A, size, counter); // следующая перестановка
        swap(A[k], A[i]);
    }
}
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 6
23.12.2016, 20:55  [ТС]
К сожалению, там нет ничего подходящего, везде функции, массивы(

Добавлено через 3 минуты
Простите, забыл указать. Массивы тоже не изучены

Добавлено через 8 минут
с массивами никак(
0
1 / 1 / 1
Регистрация: 18.11.2016
Сообщений: 7
23.12.2016, 21:38
Использовать нужно было эту формулу для перестановок: Wikipedia
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 <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
    int n;
    cout<<"Enter the number of elements:\t";
    cin>>n;
 
    long int Num = 0;
    if (n>=1) Num = 1;
    if (n<32)
    {
        for(int i = 2; i<(n+1); i++)
        {
            Num*=i;
        }
        cout<<"\nThe number of permutations:\t"<<Num<<endl;
    }
    else cout<<"\nError: out of range\n";
 
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2016, 22:11
Aslav, Это вы посчитали количество. Правильно. n!
Но нужно все их сгенерировать
Дело-то не сложное. Но вот ограничения... Честно говоря, я их не люблю.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.12.2016, 22:21
Цитата Сообщение от Байт Посмотреть сообщение
Но вот ограничения... Честно говоря, я их не люблю.
Да эта задача без функций и массивов не решается (никто в здравом уме её не будет решать таким способом).
ТС-у дали два варианта с комментариями всех сколько-нибудь сложных моментов.
А он вместо того, чтобы элементарно понять несколько строчек кода, решил что ему тут будут толпы программистов код под глупые ограничения писать.
Уже жаль стало, что код опубликовал - тут даже готовому не рады.
1
1 / 1 / 1
Регистрация: 18.11.2016
Сообщений: 7
23.12.2016, 22:54
Я, посмотрев ниже, посчитал, что ошибка в условиях: т.к. без массивов это точно не решить. Однако как писал выше Студент ИБ: массивы они не изучали, а значит тут возможно посчитать, только количество перестановок. Что собственно и приведено в решении.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2016, 23:35
Цитата Сообщение от MrGluck Посмотреть сообщение
Да эта задача без функций и массивов не решается (никто в здравом уме её не будет решать таким способом).
Наверное, можно решить рекурсией. И даже вполне изячно. Но если функций не знают - тогда как? И вообще, уже конечно в лом...
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 6
24.12.2016, 01:15  [ТС]
Такая вот задача по основам программирования
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
15.01.2017, 11:20
Студент ИБ, если еще актуально, то изучали ли вы sting (что по сути и является массивом)?
Кроме того
Цитата Сообщение от Байт Посмотреть сообщение
Aslav, Это вы посчитали количество. Правильно. n!
не правильно. ..вернее не совсем. факториал n (n!) это число перестановок (без повторений) ячеек, в которые записаны символы, а не самих символов. Соответственно... формула сложнее чем n!.
Но если достаточно n!, то:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <locale.h>
#include <windows.h>
 
int fact(int x)
{
    if (x > 16 || x < 0) return 0;
    if (x == 0 || x == 1) return 1; 
    int a = 1;
    for(int i=1; i<=x; i++)
    {
        a = a * i;
    }
    return a;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    
    int a, n, f, size, m, d;
    char *str = "ABCDEFG";
    size = strlen(str);
    char tmp[size+1];
    char rez[size+1];
    
    for (int k=1; k <= fact(size); k++)
    {
        memset(tmp, 0, sizeof(tmp));
        memset(rez, 0, sizeof(rez));
        for (int i=0; i<size; i++) tmp[i] = str[i];
        n = k-1;
        a = size;
        for (int i=0; i<size; i++)
        {
            f = fact(a-1);
            m = n % f;
            d = n / f;
            while (d >= a) d = d % a;
            rez[i] = tmp[d];
            tmp[d] = 0;
            for (int j=0; j<size; j++)
            {
                if ((tmp[j] == 0) && (j < size-1))
                {
                    tmp[j] = tmp[j+1];
                    tmp[j+1] = 0;
                }
            }
            a--;
        }
        printf("%d\t%s\n", k, rez);
    }
    return 0;
}
тело функции можно реализовать в main, а вместо массивов использовать string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2017, 11:20
Помогаю со студенческими работами здесь

Перебор без повторений
текст задачи во вложении мой код: #include &lt;iostream&gt; using namespace std; int f(int v) { if (v == 0) return 1; ...

Перестановки без повторений
привет помогите пожалуйста найти файлик в котором бы были все перестановки из 5 элементов. мне нужно проверить правильно...

Перестановки без повторений
Требуется дописать исключение повторений в коде,спасибо. #include &lt;iostream&gt; using namespace std; const int N =11; int n,a,p; ...

Перестановки без повторений
Как из этого кода сделать конфетку — чтобы не выводились повторения? #include &lt;iostream&gt; using namespace std; string s; ...

Простая перестановка без ключа
Всем здравствуйте! У меня такое задание: Зашифруйте сообщение «успех_-_это_когда_ты_девять_раз_упал,_но_десять_раз_поднялся», используя...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru