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

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

Войти
Регистрация
Восстановить пароль
 
 
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
#1

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

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

Привет всем. У меня такая задача. Ввести элементы массива с клавиатуры, отсортировать его по возрастанию и вывести после сортировки элемент массива, который строго больше минимального. Если такого элемента нет, вывести "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 минут
Вопрос еще в силе. Подскажите кто-нибудь или хотя бы намекните, как вывести элемент массива, строго больший минимума.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 00:52     Вывести элемент массива, который строго больше минимального
Посмотрите здесь:

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

Когда элемент одного массива больше элемента другого массива, то тот элемент что больше расскладывается на меньшие элементы - C++
ребят не могу подобрать алгоритм ,такой что когда елемент одного массива больше елемента другого массива,то тот елемент что больше...

вывести элементы, значения которых строго больше 50 - C++
Нужно вывести элементы, значения которых строго больше 50. В двумерном массиве 3х4. Пожалуйста, не могу вообще разобраться)) :cry: ...

Написать программу, которая выводит на экран значение минимального элемента массива из 100 элементов. Вывести минимальный элемент - C++
Написать программу, которая выводит на экран значение минимального элемента массива из 100 элементов. Массив заполняется случайными числами...

Определить, что больше: максимальный элемент массива А[10] или минимальный элемент массива В[7] - C++
Определить, что больше: максимальный элемент массива А или минимальный элемент массива В. Поставить максимальный элемент из них на место...

В упорядоченном по возрастанию массиве перенести в начало первый элемент, значение которого больше минимального. - C++
В упорядоченном по возрастанию массиве перенести в начало первый элемент, значение которого больше минимального. Нахождение минимального...

Число элементов массива, не больше максимального, но и не меньше минимального - C++
Число элементов массива Х,которые не превосходят максимального элемента масива Y,и в тоже время не меньше его минимального элемента.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tchikh
50 / 70 / 11
Регистрация: 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");
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
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. В чем проблема?
Миниатюры
Вывести элемент массива, который строго больше минимального  
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 01:30     Вывести элемент массива, который строго больше минимального #4
Sh@dow777, вам стоит сделать цикл до n-1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
08.06.2014, 01:32  [ТС]     Вывести элемент массива, который строго больше минимального #5
Tchikh, Сейчас попробую.
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 273
08.06.2014, 01:35     Вывести элемент массива, который строго больше минимального #6
Sh@dow777,
Ах да, вывод "NO" должен быть вне цикла, конечно.
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
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;
}
Изображения
 
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
08.06.2014, 02:08  [ТС]     Вывести элемент массива, который строго больше минимального #8
Tchikh, Все, я так и понял. Сейчас попробую.

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

Добавлено через 16 минут
Может быть мне нужно использовать другой алгоритм сортировки?
Nekto
342 / 287 / 10
Регистрация: 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;
  }
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
08.06.2014, 02:25  [ТС]     Вывести элемент массива, который строго больше минимального #10
Nekto, А как это реализовать на Си? Я бы создал тему в соответствующем разделе, но туда мало кто заходит. Судя по вашему коду, это почти тоже самое, что я написал. Я прав? Просто вы создаете вектор, а не массив. Но мне пишут "Неправильный ответ".
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
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;
}
Сомневаюсь, насколько быстр этот способ, но работает (хотя лучше лишний раз проверить)
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
08.06.2014, 03:01  [ТС]     Вывести элемент массива, который строго больше минимального #12
MastAKK, Нет, сортировка обязательна. Вот задача:
Однажды Васе понадобилось найти вторую порядковую статистику последовательности целых чисел, то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума. Помогите Васе справиться с этой задачей.
Входные данные
В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100) — количество чисел в последовательности. Во второй строке через пробел записаны n целых чисел — элементы последовательности. Эти числа не превосходят по модулю 100.
Выходные данные

Если в заданной последовательности вторая порядковая статистика существует, выведите ее, иначе выведите NO.
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
08.06.2014, 03:05     Вывести элемент массива, который строго больше минимального #13
Sh@dow777, в задаче не просят ничего отсортировать, если верить написанным вами условиям
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
08.06.2014, 03:13  [ТС]     Вывести элемент массива, который строго больше минимального #14
MastAKK,
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума.
Вот примеры(изображение). Я вроде все верно сделал.
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 03:37     Вывести элемент массива, который строго больше минимального
Еще ссылки по теме:

Не найду ошибку (функция, которая ищет максимальный элемент, который встречается больше 1 раза) - C++
int app_2(int **matr, int n, int m) { int first=matr; int end=matr; for(int i=0; i &lt; n;i++) for(int j=0; j &lt; m ;j++) ...

Если номер минимального массива больше 5, поменять его местами с первым элементом - C++
Здравствуйте, Люди очень прошу вашей помощи в решении данной задачи, что то не хватает фантазии перевести её в программный код. Заранее...

В одномерном массиве, который состоит из n вещественных элементов подсчитать номер минимального элемента массива - C++
В одномерном массиве, который состоит из n вещественных элементов подсчитать: 1) номер минимального элемента массива; 2)сумму...

Нахождение последнего элемента одномерного числового массива, который больше 1 - C++
доброго времени суток,Вам. напишите пожалуйста программу, которая будет находить последний элемент одномерного числового массива,который...

Удалить из массива элемент, расположенный после минимального элемента - C++
Удалить из массива элемент, расположенный после минимального элемента. Если удаление элемента невозможно, выдать об этом сообщение.


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

Или воспользуйтесь поиском по форуму:
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
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, Я сам проверял. Вывод верный. Не понимаю, в чем проблема.
Yandex
Объявления
08.06.2014, 03:37     Вывести элемент массива, который строго больше минимального
Ответ Создать тему
Опции темы

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