0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 8
1

Выяснить является ли последовательность перестановкой числового ряда

21.02.2018, 19:29. Показов 1156. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна помощь

Дано некоторое натуральное n (n ≤ 100) и целые числа а1 , а2, an

Выяснить есть ли последовательность – перестановкой чисел 1, 2......


Данная задача есть на форуме, но на Паскаль...

(Выяснить, является ли последовательность перестановкой чисел)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2018, 19:29
Ответы с готовыми решениями:

Выяснить, является ли заданная последовательность перестановкой цифр от 1 до n
Дано некоторое натуральное n (n <= 100) и целые числа а1, а2, an. Выяснить, является ли эта...

Проверить является ли заданная последовательность целых чисел перестановкой чисел натурального ряда
Проверить, является ли заданная последовательность целых чисел перестановкой начального отрезка...

Выяснить, является ли последовательность перестановкой чисел
Дано деяке натуральне n(n<=100) і цілі числа а1,а2,…аn. З’ясувати, чи є ця послідовність...

Проверить, является ли последовательность элементов линейного массива перестановкой натуральных чисел 1,2,3, ., n
Проверить, является ли последовательность элементов линейного массива перестановкой натуральных...

4
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
25.02.2018, 19:29 2
GreedWood, здравствуйте! Можно перебрать все комбинации с помощью встроенной функции:

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 <bits/stdc++.h>
 
using namespace std;
 
bool isPerm(int* x, int* y, int n)
{
    for (int i = 0; i < n; i++)
    {
        if (x[i] != y[i])
            return false;
    }
    return true;
}
 
int main()
{
    int n;
    bool flag = false;
    cout << "Enter a quantoty of numbers:\n";
    cout << "n = ";
    cin >> n;
    int* arr = new int[n];
    int* perm = new int[n];
    cout << "Enter some numbers:\n";
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
        perm[i] = i + 1;
    }
    do
    {
        if (isPerm(arr, perm, n))
        {
            cout << "Yes!\n";
            flag = true;
            break;
        }
    } while (next_permutation(perm, perm + n));
    if (!flag)
        cout << "No!\n";
    delete [] arr;
    delete [] perm;
    system("pause");
    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
#include <bits/stdc++.h>
 
using namespace std;
 
bool isPerm(int* x, int* y, int n)
{
    for (int i = 0; i < n; i++)
    {
        if (x[i] != y[i])
            return false;
    }
    return true;
}
 
int main()
{
    int n;
    cout << "Enter a quantoty of numbers:\n";
    cout << "n = ";
    cin >> n;
    int* arr = new int[n];
    int* perm = new int[n];
    cout << "Enter some numbers:\n";
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
        perm[i] = i + 1;
    }
    sort(arr, arr + n);
    if (isPerm(arr, perm, n))
        cout << "Yes!\n";
    else
        cout << "No!\n";
    delete [] arr;
    delete [] perm;
    system("pause");
    return 0;
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
25.02.2018, 19:41 3
Если я правильно понял задание, то нужно
а) Чтобы все числа были 1 <= ai <= n
б) Чтобы не было повторов

Добавлено через 5 минут
Fixer_84, В вашем втором коде массив perm совершенно не нужен. Можно сравнивать с i+1
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
25.02.2018, 19:50 4
Цитата Сообщение от Байт Посмотреть сообщение
В вашем втором коде массив perm совершенно не нужен. Можно сравнивать с i+1
Байт, спасибо за ваше замечание. Опять поторопился. Конечно, так будет проще:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n;
    bool flag = true;
    cout << "Enter a quantoty of numbers:\n";
    cout << "n = ";
    cin >> n;
    int* arr = new int[n];
    cout << "Enter some numbers:\n";
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    sort(arr, arr + n);
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != i + 1)
        {
            cout << "No!\n";
            flag = false;
            break;
        }
    }
    if (flag)
        cout << "Yes!\n";
    delete [] arr;
    system("pause");
    return 0;
}
2
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 8
26.02.2018, 17:43  [ТС] 5
спасибо)
0
26.02.2018, 17:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 17:43
Помогаю со студенческими работами здесь

Выяснить, является ли последовательность возрастающей
Дана последовательность действительных чисел a1,a2,a3,..,an. Выяснить, будет ли она возрастающей......

Выяснить, является ли последовательность упорядоченной по убыванию
Задание: Даны натуральное число n, действительные числа a1, ... an. Выяснить, является ли...

Выяснить, является ли последовательность упорядоченной по убыванию
Даны натуральное число n, действительные числа a1, ..., an. Выяснить, является ли...

Выяснить, является ли последовательность a1,...,an упорядоченной по убыванию
Даны натуральное число n, действительные числа a1,..., an. Выяснить, является ли последовательность...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru