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

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

Восстановить пароль Регистрация
 
 
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 00:52     Вывести элемент массива, который строго больше минимального #1
Привет всем. У меня такая задача. Ввести элементы массива с клавиатуры, отсортировать его по возрастанию и вывести после сортировки элемент массива, который строго больше минимального. Если такого элемента нет, вывести "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++
вывести элементы, значения которых строго больше 50 C++
C++ Определить, что больше: максимальный элемент массива А[10] или минимальный элемент массива В[7]
Вывести количество элементов массива, которые строго больше обоих своих соседей (исправить) C++
Написать программу, которая выводит на экран значение минимального элемента массива из 100 элементов. Вывести минимальный элемент C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 253
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
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
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
Сообщений: 253
08.06.2014, 01:30     Вывести элемент массива, который строго больше минимального #4
Sh@dow777, вам стоит сделать цикл до n-1
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 01:32  [ТС]     Вывести элемент массива, который строго больше минимального #5
Tchikh, Сейчас попробую.
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 253
08.06.2014, 01:35     Вывести элемент массива, который строго больше минимального #6
Sh@dow777,
Ах да, вывод "NO" должен быть вне цикла, конечно.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
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
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
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
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 02:25  [ТС]     Вывести элемент массива, который строго больше минимального #10
Nekto, А как это реализовать на Си? Я бы создал тему в соответствующем разделе, но туда мало кто заходит. Судя по вашему коду, это почти тоже самое, что я написал. Я прав? Просто вы создаете вектор, а не массив. Но мне пишут "Неправильный ответ".
MastAKK
 Аватар для MastAKK
144 / 135 / 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
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 03:01  [ТС]     Вывести элемент массива, который строго больше минимального #12
MastAKK, Нет, сортировка обязательна. Вот задача:
Однажды Васе понадобилось найти вторую порядковую статистику последовательности целых чисел, то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума. Помогите Васе справиться с этой задачей.
Входные данные
В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100) — количество чисел в последовательности. Во второй строке через пробел записаны n целых чисел — элементы последовательности. Эти числа не превосходят по модулю 100.
Выходные данные

Если в заданной последовательности вторая порядковая статистика существует, выведите ее, иначе выведите NO.
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
08.06.2014, 03:05     Вывести элемент массива, который строго больше минимального #13
Sh@dow777, в задаче не просят ничего отсортировать, если верить написанным вами условиям
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 03:13  [ТС]     Вывести элемент массива, который строго больше минимального #14
MastAKK,
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума.
Вот примеры(изображение). Я вроде все верно сделал.
Изображения
 
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
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, Я сам проверял. Вывод верный. Не понимаю, в чем проблема.
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
08.06.2014, 03:41     Вывести элемент массива, который строго больше минимального #16
Sh@dow777, а он этапы проверки не показывает? На чём конкретно запоролся?
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 03:44  [ТС]     Вывести элемент массива, который строго больше минимального #17
MastAKK, На первом тесте ошибка. Тесты я не знаю, естественно.
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
08.06.2014, 03:46     Вывести элемент массива, который строго больше минимального #18
Sh@dow777, может слишком долго отрабатывает? Хотя сомневаюсь...
Попробуйте сделать везде проверку "на дурака", авось система хитрит?
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
08.06.2014, 03:52  [ТС]     Вывести элемент массива, который строго больше минимального #19
MastAKK, Если слишком долго отрабатывает, то пишет всегда другую ошибку "Превышено максимальное время работы". А сейчас "Неправильный ответ". Причем на 1-ом тесте. Это значит, что по ходу, я не в ту сторону вообще иду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 09:52     Вывести элемент массива, который строго больше минимального
Еще ссылки по теме:

Дан массив целых чисел. Найти В этом массиве минимальный элемент т и максимальный элемент м. Вывести сумму элементов от минимального до максимального C++
C++ Число элементов массива, не больше максимального, но и не меньше минимального
C++ Когда элемент одного массива больше элемента другого массива, то тот элемент что больше расскладывается на меньшие элементы

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

Или воспользуйтесь поиском по форуму:
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 253
08.06.2014, 09:52     Вывести элемент массива, который строго больше минимального #20
Sh@dow777, может проблема в файлах/неправильном формате вывода?
Yandex
Объявления
08.06.2014, 09:52     Вывести элемент массива, который строго больше минимального
Ответ Создать тему
Опции темы

Текущее время: 13:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru