Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
#1

те же перестановки - C++

25.10.2011, 23:53. Просмотров 502. Ответов 5
Метки нет (Все метки)

Вот опять задачка на перестановки, если кому интересно, или кому просто не трудно сделать, буду очень признателен! Заранее огромное спасибо.
Дана последовательность 1, ... , n.
Нужно найти все перестановки этой последовательности так, чтобы числа стоящие на своих позициях не вставали на них снова, и посчитать кол-во этих перестановок.
т.е. например 1, 2, 3. это 2, 3, 1 и 3, 1, 2. кол-во = 2;
1, 2, 3, 4. это 2, 1, 4, 3. 3, 4, 2, 1. 4, 3, 1, 2.и т д
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 23:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос те же перестановки (C++):

Перестановки: чтобы любые две соседние перестановки отличались только порядком двух соседних элементов - C++
Вводится число n <= 8. Вывести все перестановки чисел 1,2..,n, так, чтобы две любые две соседние перестановки отличались только порядком...

перестановки в С++ - C++
Поменять местами элементы с четными и нечетными номерами

Перестановки - C++
Даны символы, например ABCDEF, и число n. Нужно вывести все возможные комбинации перестановок этих символов по n. Максимальное число...

Перестановки - C++
Есть число которое складается из нулей и единиц. C клавиатуры вводится N - общее количество цифр и K - количество единиц. Найти и вивести...

Перестановки без i - C++
Есть рекурсивная функция ,генерирующая перестановки.Требуется,чтобы на i месте(p) не стоял i.Причем проверять это надо не при...

перестановки с повторениями! - C++
Помогите! есть прога все считает правильно только не выводит значения с повторениями! помогите исправить! // mat_kkursa.cpp:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2011, 00:00 #2
Montanaa, задача очень проста:
кол-во всегда равно n-1
а сами перестановки делаете циклически (по кругу) сдвигая числа.
0
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
26.10.2011, 16:12  [ТС] #3
Вам не составит труда написать код? я так не могу разобраться ((
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.10.2011, 16:18 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
int main()
{
    int n;
    std::cin >> n;
    std::vector<int> arr(n);
    std::cout << "Count: " << n - 1 << "\nPermutations:\n";
    for (int i = 0; i < n; ++i)
        arr[i] = i + 1;
    
    for (int i = 0; i < n - 1; ++i)
    {
        std::rotate( arr.begin(), arr.begin() + 1, arr.end() );
        std::copy( arr.begin(), arr.end(), std::ostream_iterator<int> (std::cout, " ") );
        std::cout << std::endl;
    }
}
1
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
26.10.2011, 16:38  [ТС] #5
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
int main()
{
    int n;
    std::cin >> n;
    std::vector<int> arr(n);
    std::cout << "Count: " << n - 1 << "\nPermutations:\n";
    for (int i = 0; i < n; ++i)
        arr[i] = i + 1;
    
    for (int i = 0; i < n - 1; ++i)
    {
        std::rotate( arr.begin(), arr.begin() + 1, arr.end() );
        std::copy( arr.begin(), arr.end(), std::ostream_iterator<int> (std::cout, " ") );
        std::cout << std::endl;
    }
}
смысл немножко не в этом. я задаю какую то последовательность цифр. а программа должна выводить все возможные перестановки так, чтобы цифры не стояли на своих позициях. и посчитать кол-во таких перестановок
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.10.2011, 19:15 #6
Цитата Сообщение от Montanaa Посмотреть сообщение
смысл немножко не в этом. я задаю какую то последовательность цифр. а программа должна выводить все возможные перестановки так, чтобы цифры не стояли на своих позициях. и посчитать кол-во таких перестановок
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 <vector>
#include <iterator>
int main()
{
        std::cout << "Enter size of array: ";
        int n;
        std::cin >> n;
        
        std::cout << "Enter array: ";
        std::vector<int> arr(n);
        for (int i = 0; i < n; ++i)
            std::cin >> arr[i];
            
        std::cout << "Count: " << n - 1 << "\nPermutations:\n";
        
        for (int i = 0; i < n - 1; ++i)
        {
                std::rotate( arr.begin(), arr.begin() + 1, arr.end() );
                std::copy( arr.begin(), arr.end(), std::ostream_iterator<int> (std::cout, " ") );
                std::cout << std::endl;
        }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 19:15
Привет! Вот еще темы с ответами:

Сдвиг перестановки. - C++
Думал алгоритм решения таков : находим минимальный элемент ставим его на первое место и сдвигаем последовательность. Но такое решение...

Инверсии и перестановки - C++
Ребят, помогите пожалуйста, сделать 2 задачки, буду очень вам признателен! Заранее огромное спасибо. 1.Дана перестановка. Наименьшее...

Перестановки с next_permutation - C++
Есть входные данные 9-12 цифр надо из них создать все возможные перестановки и отправить их в вектор. Задумка do { ...

Двойные перестановки - C++
Здравствуйте программисты.Нужна ваша помощь. Помогите написать программу простенькую, на C++ : двойные перестановки n1*m1 + n2*m2 Буду...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.10.2011, 19:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru