Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
1

Вывести элемент массива, который строго больше минимального

08.06.2014, 00:52. Показов 5030. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. У меня такая задача. Ввести элементы массива с клавиатуры, отсортировать его по возрастанию и вывести после сортировки элемент массива, который строго больше минимального. Если такого элемента нет, вывести "NO", то есть, если массив 1 1 1 1 1. А если отсортированный массив - 1 1 3 5 6, то должно вывести 3. Первые 2 части задачи я сделал
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
#include <stdio.h>
#include <conio.h>
 
int n, i, j, t;
 
void sort( int a[], int n, int i, int j, int t){
 
    for(i = 0;i < n;i++){
        for(j = 0;j < n - 1;j++){
            if(a[j] > a[j + 1]){
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
}
int main()
{
    scanf("%d", &n);
    int *a = new int[n];
 
    for(i = 0;i < n;i++)
        scanf("%d", &a[i]);
 
    sort(a,n,i,j,t);
        
    getch();
 
    return 0;
}
А вот как вывести элемент, строго больший минимума, не могу понять. Помогите, кому не трудно. Заранее спасибо.

Добавлено через 56 минут
Вопрос еще в силе. Подскажите кто-нибудь или хотя бы намекните, как вывести элемент массива, строго больший минимума.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2014, 00:52
Ответы с готовыми решениями:

Вывести элемент одномерного массива, который встретился раньше минимального или максимального элемента
Всем привет! Помогите пожалуйста решить задачу. Нужно в задаче использовать процедуры и функции....

Вывести количество элементов массива, которые строго больше обоих своих соседей (исправить)
Сначала задано число N — количество элементов в массиве (1N100). Далее через пробел записаны N...

Если максимальный элемент массива А больше минимального элемента массива В, поменять данные элементы местами
Задача, вроде, не сложная, может есть у кого готовая такая? Мне её на разбор надо.. Помогите,...

Среди положительных элементов массива найти тот, который больше минимального, но меньше всех остальных
2. Среди положительных элементов найдите тот, который больше минимального, но меньше всех остальных.

20
52 / 72 / 20
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 00:56 2
Если что, в С++ есть стандартная сортировка. А вообще вот.
C++
1
2
3
4
5
6
7
8
9
10
int boo = 0;
for (int i = 1; i < n; i++)
  if (a[i] != a[i - 1])
  {
    printf("%d\n", a[i]);
    boo = 1;
    break;
  }
if (!boo)
  puts("NO");
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 01:15  [ТС] 3
Tchikh, Спасибо за помощь. Я догадывался, что нужно использовать break. Я немного переделал ваш код.
C++
1
2
3
4
5
6
7
8
9
    for(i = 0;i < n;i++){
        if(a[i] < a[i + 1]){
            printf("%d", a[i + 1]);
            y = 1;
            break;
        }
        if(!y)
            printf("NO");
    }
Но теперь если я ввожу массив из 20 чисел, то мне выдает такое(изображение). Хотя должно вывести -1. В чем проблема?
Миниатюры
Вывести элемент массива, который строго больше минимального  
0
52 / 72 / 20
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 01:30 4
Sh@dow777, вам стоит сделать цикл до n-1
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 01:32  [ТС] 5
Tchikh, Сейчас попробую.
0
52 / 72 / 20
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 01:35 6
Sh@dow777,
Ах да, вывод "NO" должен быть вне цикла, конечно.
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 01:42  [ТС] 7
Tchikh, Изменил. Теперь элемент массива выводит верно. Но если я ввожу массив из 15-ти единиц, то выводит вот это(изображение). Вот еще раз код.
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
#include <stdio.h>
#include <conio.h>
 
int n, i, j, t;
 
void sort( int a[], int n, int i, int j, int t){
 
    for(i = 0;i < n;i++){
        for(j = 0;j < n - 1;j++){
            if(a[j] > a[j + 1]){
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
}
int main()
{
    int y = 0;
    scanf("%d", &n);
    int *a = new int[n];
 
    for(i = 0;i < n;i++)
        scanf("%d", &a[i]);
 
    sort(a,n,i,j,t);
 
    for(i = 0;i < n - 1;i++){
        if(a[i] < a[i + 1]){
            printf("%d", a[i + 1]);
            y = 1;
            break;
        }
        if(!y)
            printf("NO");
    }
        
    getch();
 
    return 0;
}
Изображения
 
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 02:08  [ТС] 8
Tchikh, Все, я так и понял. Сейчас попробую.

Добавлено через 6 минут
Tchikh, Это олимпиадная задача. Вроде выводит все верно. Но пишут "Неправильный ответ". Не понимаю, в чем проблема.

Добавлено через 16 минут
Может быть мне нужно использовать другой алгоритм сортировки?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
08.06.2014, 02:17 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
  {
  size_t size;
  std::cin >> size;
  std::vector<long long> vector;
  vector.resize(size);
  for (size_t i = 0; i < size; ++i)
    std::cin >> vector[i];
  std::sort(vector.begin(), vector.end());
  for (size_t i = 1; i < size; ++i)
    if (vector[i] > vector[0])
      {
      std::cout << vector[i];
      return 0;
      }
  std::cout << "NO";
  return 0;
  }
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 02:25  [ТС] 10
Nekto, А как это реализовать на Си? Я бы создал тему в соответствующем разделе, но туда мало кто заходит. Судя по вашему коду, это почти тоже самое, что я написал. Я прав? Просто вы создаете вектор, а не массив. Но мне пишут "Неправильный ответ".
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
08.06.2014, 02:57 11
А можно и без сортировки, кстати:
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
#include <iostream>
 
int main() {
    int size;
    std::cin >> size;
    int* mas = new int[size];
 
    int min, max;
    for(int i = 0; i < size; ++i){
        std::cin >> mas[i];
        if(!i){
            min = mas[i];
            max = mas[i];
        }
        if(mas[i] < min)
            min = mas[i];
        else if(mas[i] > max)
            max = mas[i];
    }
    if(min == max)
        std::cout << "NO";
    else{
        int res = max;
        for(int i = 0; i < size; ++i)
            if(mas[i] < res && mas[i] > min)
                res = mas[i];
        std::cout << res;
    }
    return 0;
}
Сомневаюсь, насколько быстр этот способ, но работает (хотя лучше лишний раз проверить)
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 03:01  [ТС] 12
MastAKK, Нет, сортировка обязательна. Вот задача:
Однажды Васе понадобилось найти вторую порядковую статистику последовательности целых чисел, то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума. Помогите Васе справиться с этой задачей.
Входные данные
В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100) — количество чисел в последовательности. Во второй строке через пробел записаны n целых чисел — элементы последовательности. Эти числа не превосходят по модулю 100.
Выходные данные

Если в заданной последовательности вторая порядковая статистика существует, выведите ее, иначе выведите NO.
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
08.06.2014, 03:05 13
Sh@dow777, в задаче не просят ничего отсортировать, если верить написанным вами условиям
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 03:13  [ТС] 14
MastAKK,
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума.
Вот примеры(изображение). Я вроде все верно сделал.
Изображения
 
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 03:37  [ТС] 15
MastAKK, Все, я понял вас. Сейчас попробую ваш вариант.

Добавлено через 13 минут
MastAKK, Все равно выдает "Неправильный ответ". Вот ваш код. Я переделал для Си, так как компилятор в системе проверки не принимает С++.
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
#include <stdio.h>
 
int main() {
    int n;
     scanf("%d", &n);
    int* a = new int[n];
 
    int min, max;
    for(int i = 0; i < n; ++i){
        scanf("%d", &a[i]);
        if(!i){
            min = a[i];
            max = a[i];
        }
        if(a[i] < min)
            min = a[i];
        else if(a[i] > max)
            max = a[i];
    }
    if(min == max)
        printf("NO");
    else{
        int res = max;
        for(int i = 0; i < n; ++i)
            if(a[i] < res && a[i] > min)
                res = a[i];
        printf("%d", res);
    }
    return 0;
}
Добавлено через 2 минуты
MastAKK, Я сам проверял. Вывод верный. Не понимаю, в чем проблема.
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
08.06.2014, 03:41 16
Sh@dow777, а он этапы проверки не показывает? На чём конкретно запоролся?
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 03:44  [ТС] 17
MastAKK, На первом тесте ошибка. Тесты я не знаю, естественно.
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
08.06.2014, 03:46 18
Sh@dow777, может слишком долго отрабатывает? Хотя сомневаюсь...
Попробуйте сделать везде проверку "на дурака", авось система хитрит?
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
08.06.2014, 03:52  [ТС] 19
MastAKK, Если слишком долго отрабатывает, то пишет всегда другую ошибку "Превышено максимальное время работы". А сейчас "Неправильный ответ". Причем на 1-ом тесте. Это значит, что по ходу, я не в ту сторону вообще иду.
0
52 / 72 / 20
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 09:52 20
Sh@dow777, может проблема в файлах/неправильном формате вывода?
0
08.06.2014, 09:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2014, 09:52
Помогаю со студенческими работами здесь

Определить на сколько максимальный элемент массива больше минимального
Дан массив определить на сколько максимальный элемент больше минимального

Определить, насколько максимальный элемент массива больше минимального
1) Заполнить массив из 15-ти элементов случайным образом вещественными значениями, лежащими в...

Вычислить, на сколько максимальный элемент массива больше минимального элемента
Дан массив.Вычислить на сколько максимальный элемент больше минимального элемента

Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемент
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и...


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

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