Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
#1

Номер перестановки

17.11.2013, 14:35. Просмотров 2010. Ответов 8
Метки нет (Все метки)

Надо написать программу которая выдаёт номер перестановки, и при етом не генерирует сами перестановки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 14:35
Ответы с готовыми решениями:

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

Дан номер года, определить соответствующий ему номер столетия
Дан номер некоторого года(целое положительное число). Определить...

Выяснить номер квартала и номер полугодия по введенному номеру месяца
Вводится число k - номер месяца. Выяснить номер квартала и номер полугодия по...

При выводе массива выводить номер строки и номер столбца
Помогите реализовать вывод номера строки и столбца массива, у меня рандом...

Найти номер строки и номер столбца, в котором находится минимальный элемент матрицы
Как вывести номер столбца и номер строки? Совсем запутался. Вот код: ...

8
VladislavTepes
78 / 78 / 14
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
17.11.2013, 14:45 #2
pashazt, перестановки чего и куда, я не очень понимаю.
0
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
17.11.2013, 14:54  [ТС] #3
Yу ,например, возьмём лексикографические перестановки. Есть универсальное множество : 1234.
Вводим с клавиатуры 1342 и получаем номер перестановки - 4.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.11.2013, 15:18 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
 
int main()
{
    std::vector<int> v= {1,2,3,4};
    std::vector<int> u= {1,3,4,2};
 
    int i = 0;
    while( u != v )
    {
        std::next_permutation( std::begin(v), std::end(v) );
        i++;
    }
 
    std::cout << i << std::endl;
}
0
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
17.11.2013, 15:23  [ТС] #5
У вас происходит поиск номера с помощью генерации перестановок. А надо без генерации.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.11.2013, 15:27 #6
Цитата Сообщение от pashazt Посмотреть сообщение
А надо без генерации.
Имхо, это как перейти от первого элемента линейного списка к последнему, не пробегая элементы между ними.
0
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
17.11.2013, 15:33  [ТС] #7
Вот я тоже не знаю как ето сделать, хотя преподователь чётко сказал - без генерации!
0
salam
175 / 156 / 29
Регистрация: 10.07.2012
Сообщений: 766
17.11.2013, 18:27 #8
не утверждаю, но вроде логично.
идем слева направо. для позиции i вклад в ответ равен лексикографическая позиция i-ого элемента * факториал оставшейся длины. ответ только в 0-индексации.
например, 1342.
ans = 0 * 3! (1 - лексикографические первый элемент из оставшихся)
+ 1 * 2! (3 - лексикографически второй элемент из оставшихся)
+ 1 * 1! (4 - лексикографически второй элемент из оставшихся)
+ 0 * 0! (2 - лексикографически первый элемент из оставшихся).

2134. ans = 1 * 3! + 0 * 2! + 0 * 1! + 0 * 0!.
0
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
17.11.2013, 19:08  [ТС] #9
Вот пытался написать, но выводит неправильно.

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
#include <iostream>
 
using namespace std;
 
int fact(int n)
{
    int fact = 1;
    for(int i = n; i > 0; i--)
    {
        fact = i * fact;
    }
    return fact;
}
 
int main()
{
    const int n = 4;
    
    int c = 0;
    int m[n] = {1,2,4,3};
    int m1[16];
    
    long int sc = 1;
 
    for(int i = 0; i<=n; i++)
    {
        int j = 1, sq = 0;
         while(j < m[i])
            {
                
                 if(j!=m1[i])
                     {
                         sq++;
                     }
                 j++;
            }
  
         m1[i] =m1[i] +  m[i];
         sc = sc + fact(n-(i+1)) * sq;   
        
    }
 
     cout << sc << endl;;
        system("pause");
}
0
17.11.2013, 19:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 19:08

Найти номер строки и номер столбца матрицы, в которых находятся максимальный элемент
задание 4 Задан двухмерный массив чисел. Элементы матрицы вводятся с...

Необходимо найти номер строки и номер столбца, в которых находится наименьший элемент.
Массив размерностью MxN. Необходимо найти номер строки и номер столбца, в...

Определить номер строки и номер столбца матрицы, на пересечении которых находятся требуемые элементы
В двумерном массиве определить номер строки и номер столбца, на пересечении...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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