Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Sh@dow777
16 / 16 / 6
Регистрация: 10.12.2013
Сообщений: 707
#1

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

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

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

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

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

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

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

В массиве каждый элемент заменить на ближайший следующий за ним элемент, который больше его
Помогите выполнить лабу на с++ Само задание: В таблице А размера N за один...

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

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

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

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

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

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

Дан массив целых чисел. Найти В этом массиве минимальный элемент т и максимальный элемент м. Вывести сумму элементов от минимального до максимального
Дан массив целых чисел. Найти В этом массиве минимальный элемент т и...

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


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

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

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