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

Определить, является ли массив перестановкой от 1 до N

28.10.2018, 22:01. Показов 8706. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан массив размера N. Выяснить, является ли этот массив перестановкой чисел от 1 до N (то есть каждое число от 1 до N встречается в массиве ровно один раз).

Формат входных данных
В первой строке входных данных задано натуральное число N - количество элементов массива. (1 ≤ N ≤ 100).

Во второй строке заданы N целых положительных чисел, не превышающих по величине 100. Числа разделены одним пробелом.

Формат результата
Если данный массив является перестановкой, выведите слово YES.

В противном случае выведите две строки - в первой строке слово NO, во второй строке - номер первого недопустимого элемента.

Мне кажется что проблема в выводе номера первого недопустимого элемента. Исправьте пожалуйста мой код.
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 <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(int argc, char** argv) {
    int n;
    cin >> n;
    int arr[n];
    for(int i = 0; i < n; i++){
        cin >> arr[i];
    }
    
    sort(arr, arr + n);
    
    for(int i = 0; i < n - 1; i++){
        if(arr[i]+1 != arr[i+1]){
            cout << "NO" << endl << i+1;
            return 0;
        }
    }
    cout << "YES";
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2018, 22:01
Ответы с готовыми решениями:

Является ли массив перестановкой
Не могу понять почему после правильного ответа выводит &quot;0&quot;. Само задание:Описать функцию Digit(А, N) целого типа, возвращающую 0, если...

Является ли массив перестановкой
Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0; в противном ...

Определить является ли матрица перестановкой
Здравствуйте! Условие : дана квадратная матрица. Определить является ли она перестановкой. Думал проходиться по строке и столбцу и...

7
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
28.10.2018, 22:56
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int n,temp;
    cin >> n;
    vector<pair<int,int>>v;
    for(int i = 0;i<n;++i){
        cin >> temp;
        v.push_back(make_pair(temp,i));
    }
    sort(v.begin(),v.end());
    for(int i = 0;i<n-1;++i){
        if(v[i].first == v[i+1].first || (v[i].first > n || v[i].first < 1) || (v[i+1].first > n || v[i+1].first < 1)){
            cout << "NO\n" << v[i+1].second+1;
            return 0;
        }
    }
    cout << "YES";
    
    cout << endl;
    return 0;
}
правильно тебе кажется, у тебя после сортировки начальные индексы элементов меняются
0
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 40
24.10.2019, 16:29
Мне кажется последняя задача для первокурсника не прокатит....

У меня тоже вопрос по этой теме.

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int num;
 
    cin >>num;
 
    int *arr = new int[num];
 
    for (int i = 0; i < num;i++) {
        cin >> arr[i];
        }
    for (int i = 0; i < num;i++) {
        for (int j = 0; j < num-1; j++) {
            if (arr[j] > arr[j+1]) 
                swap(arr[j], arr[j+1]);
        }
        
    }
 
    for (int i = 0; i < num;i++) {
        if (i+1!=arr[i]) {
            cout << "NO"<<endl;
            cout << arr[i]<< endl;
            return 0;
            }
    }
 
    cout << "YES";
 
    return 0;
}
только здесь надо найти не номер элемента а значение первого недопустимого элемента. Но эта задача не проходит.. я уже всю голову сломал.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
24.10.2019, 22:10
Arlekin_s, сортировка подсчётом. Если ты вычитал последовательность и все числа встречаются по одному разу - пиши что всё чётко. Если число 2 раза под ряд встретится - выведи его да и все дела.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
24.10.2019, 22:21
Цитата Сообщение от student256 Посмотреть сообщение
Дан массив размера N. Выяснить, является ли этот массив перестановкой чисел от 1 до N (то есть каждое число от 1 до N встречается в массиве ровно один раз).
Задача эквивалентна известной задаче "Найти минимальное натуральное число, отсутствующее в массиве размера N". Для того, чтобы содержимое массива являлось перестановкой необходимо и достаточно, чтобы минимальное отсутствующее число было равно N+1.

Для решения этой задачи сортировать ничего не нужно. Достаточно массива флагов [1..N].
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,252
24.10.2019, 22:34
Ахтунг! Не отлаживал, писал на заборе!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool foo(unsigned* x, unsigned count)
{
  bool result = true;
  bool* temp = new bool[count];
  memset(temp, 0, count * sizeof(bool));
  
  while (count--)
  { 
    if (!*x || *x > count || temp[*x - 1])
    { 
      result = false;
      break;
    }
    temp[*x++ - 1] = true;
  }
  
  delete []temp;
  return result;
}
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
25.10.2019, 10:53
TheCalligrapher, Verevkin, тема создана в 2018, ТС-ом надо считать пост 3
0
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 40
25.10.2019, 16:20
для певокрусника эта задача вряти подайдет...

вот переделал


задача валится на последней проверке (((

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
#include <iostream>
 
using namespace std;
 
int main()
{
int num;
 
cin >> num;
 
int *arr = new int[num];
 
bool badStatus = false;
 
for (int i = 0; i < num; i++) {
cin >> arr[i];
}
 
for (int i = 0; i < num; i++) {
for (int j = i; j < num; j++) {
if ((arr[i] > num || arr[i] <= 0) || (i != j && arr[i] == arr[j]) || (arr[i]<0)) {
badStatus = true;
break;
}
}
if (badStatus) {
cout << "NO" << endl << arr[i];
 
return 0;
 
}
}
cout << "YES";
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2019, 16:20
Помогаю со студенческими работами здесь

Есть массив, проверить, является ли он перестановкой
Проблема! Есть массив, проверить, является ли он перестановкой.Не работае программа при вводе одинаковых чисел(((( Подскажите, как...

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

Определить, является ли одно слово перестановкой букв другого
помогите розобраться с прогой на си. Вводиться 2 слова ,узнать являеться одно слово перестановкой букв другого. я попробувал на том...

Если массив является перестановкой, т.е. содержит все числа от 1 до N, то вывести 0
Array49. Дан целочисленный массив размера N. Если он является перестановкой, т. е. содержит все числа от 1 до N, то вывести 0; в противном...

Дан целочисленный массив размера N. Если он является перестановкой, то вывести 0
Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0; в противном случае...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД 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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru