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

Нахождение второго максимума - C++

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
21.01.2014, 21:27     Нахождение второго максимума #1
Дан целочисленный массив из 40 элементов, элементы могут принимать произвольные значения. Напишите алгоритм, который находит и выводит значение второго максимума (элемента, который в отсортированном по невозрастанию массиве стоял бы вторым).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#define N 40
void main(void)
{
int a[N];
int i, k, max, max2 ;
for (i = 0; i < N; i++)
scanf ("%d", &a[i]);
 
max = 0; max2 = 0;
 
for(i=0; i<N; i++)
{
if (a[i] > max) max = a[i];
if (a[i] > max2 && max2 != max) max2 = a[i];
}
 
printf("Max:%d",max);
printf("Max2:%d",max2);
scanf("%d",max);
}
Объясните пожалуйста, почему второй максимум выводится такой же как и первый?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 21:27     Нахождение второго максимума
Посмотрите здесь:

C++ Найти произведение второго минимума и третьего максимума массива
C++ Поиск максимума
Нахождение второго вхождения C++
C++ Поиск максимума и минимума
Получение максимума C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
22.01.2014, 09:44     Нахождение второго максимума #2
В 15 строке условие
C++
1
max2 != max
замените на
C++
1
a[i] != max
Добавлено через 6 минут
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
почему второй максимум выводится такой же как и первый?
Рассмотрим алгоритм вашего цикла:
1.Проверка: очередной элемент больше старого максимума.
1.1 Если условие выполнилось max изменился.
2.Проверка: очередной элемент больше 2-го максимума(выполниться всегда при выполнении 1.1)
+ проверка чтобы старый 2-ой максимум не равнялся новому максимуму(выполниться всегда при выполнении 1.1, max уже изменился,а max2 нет)
2.1 max2=max.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 12:23     Нахождение второго максимума #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#define N 40
void main(void)
{
int a[N];
int i, k, max, max2 ;
for (i = 0; i < N; i++)
scanf ("%d", &a[i]);
 
max = 0; max2 = 0;
 
for(i=0; i<N; i++)
{
    if (a[i] > max) max = a[i];
    if (a[i] > max2 && a[i] < max) max2 = a[i];
}
 
printf("Max:%d",max);
printf("Max2:%d",max2);
scanf("%d",max);
}
А так?
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
22.01.2014, 12:33     Нахождение второго максимума #4
Тамика, неправильно. По вашей реализации, ищется 2 максимум после первого, а не среди всех чисел.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 12:35     Нахождение второго максимума #5
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Тамика, неправильно. По вашей реализации, ищется 2 максимум после первого, а не среди всех чисел.
Н-ну и? Вроде так и нужно. Найти первый максимум, потом второй максимум. Он должен быть меньше первого. Или я что-то не верно поняла по заданию?
Если Вы имеете ввиду, что код выводит сразу второй по величине элемент после первого - Вы не правы. Проверила свой код. И он вывод ПЕРВЫЙ максимум среди элементов, а затем ВТОРОЙ максимум среди элементов.
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
22.01.2014, 12:38     Нахождение второго максимума #6
Тамика, должно быть 10, а не 3:

Кликните здесь для просмотра всего текста

2
3
4
10
2
34
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
Max:34Max2:3
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 12:41     Нахождение второго максимума #7
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Тамика, должно быть 10, а не 3:
Хм. Точно. Сейчас подправлю. Спасибо.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
22.01.2014, 12:43     Нахождение второго максимума #8
Тут еще вопрос,если два одинаковых числа,брать его как 2-ой максимум или нет.
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
22.01.2014, 12:44     Нахождение второго максимума #9
конечно
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
(элемента, который в отсортированном по невозрастанию массиве стоял бы вторым).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 12:51     Нахождение второго максимума
Еще ссылки по теме:

C++ Нахождение минимума/максимума в конкретной строке или столбце
C++ Выходной поток первого числа, второго , суммы первого и второго чисел
C++ Нахождение максимума в каждом столбце массива

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

Или воспользуйтесь поиском по форуму:
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
22.01.2014, 12:51     Нахождение второго максимума #10
Не увидел,тогда что мешает сделать так:
Кликните здесь для просмотра всего текста
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
# include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace std;
void main()
{
srand(time(NULL));  
const int N=40;
int a[N];
int i, k, max, max2 ;
for (i = 0; i < N; i++)
{
a[i]=10*(rand())/RAND_MAX;
cout<<a[i]<<endl;
}
max = 0; max2 = 0;
 
for(i=0; i<N; i++)
{
if (a[i]>=max)
{ 
    max2=max;
    max = a[i];
}
}
 
 
cout<<max<<"  "<<max2<<endl;
cin.get();
cin.get();
}
Yandex
Объявления
22.01.2014, 12:51     Нахождение второго максимума
Ответ Создать тему
Опции темы

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