Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

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

21.01.2014, 21:27. Просмотров 1984. Ответов 9
Метки нет (Все метки)

Дан целочисленный массив из 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);
}
Объясните пожалуйста, почему второй максимум выводится такой же как и первый?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нахождение второго максимума (C++):

Найти произведение второго минимума и третьего максимума массива - C++
Текст задачи: Задан вещественный массив размера N. Найти произведение второго минимума и третьего максимума массива. Все элементы,...

Нахождение максимума из двух чисел - C++
Даны 4 числа - a,b,c,d. Получить три числа - x=max(a,b) y=max(c,d) z=max(x,y). Нахождение максимума из двух чисел оформить функцией. Очень...

Нахождение максимума и минимума (вставка ассемблера) - C++
Не работает ассемблерная вставка. Как решить проблему? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;time.h&gt; #include...

Нахождение максимума в каждом столбце массива - C++
есть программа нахождения максимума в массиве, а надо из этого сделать нахождение максимума в каждом столбце массива. Помогите...

Нахождение минимума/максимума в конкретной строке или столбце - C++
Ребят, подскажите пожалуйста, я забыл как находить минимальный/максимальный элемент в конкретной строке/столбце. Подправьте код, а то...

Нахождение второго вхождения - C++
Нужно написать программу на Си, нахождение второго вхождение максимального элемента (без массива). Например, если задано количество чисел...

9
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,579
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.
1
Тамика
Котовчанин
918 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,197
Записей в блоге: 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);
}
А так?
0
Ev_Hyper
Заблокирован
22.01.2014, 12:33 #4
Тамика, неправильно. По вашей реализации, ищется 2 максимум после первого, а не среди всех чисел.
1
Тамика
Котовчанин
918 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,197
Записей в блоге: 27
22.01.2014, 12:35 #5
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Тамика, неправильно. По вашей реализации, ищется 2 максимум после первого, а не среди всех чисел.
Н-ну и? Вроде так и нужно. Найти первый максимум, потом второй максимум. Он должен быть меньше первого. Или я что-то не верно поняла по заданию?
Если Вы имеете ввиду, что код выводит сразу второй по величине элемент после первого - Вы не правы. Проверила свой код. И он вывод ПЕРВЫЙ максимум среди элементов, а затем ВТОРОЙ максимум среди элементов.
0
Ev_Hyper
Заблокирован
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
0
Тамика
Котовчанин
918 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,197
Записей в блоге: 27
22.01.2014, 12:41 #7
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Тамика, должно быть 10, а не 3:
Хм. Точно. Сейчас подправлю. Спасибо.
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,579
22.01.2014, 12:43 #8
Тут еще вопрос,если два одинаковых числа,брать его как 2-ой максимум или нет.
0
Ev_Hyper
Заблокирован
22.01.2014, 12:44 #9
конечно
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
(элемента, который в отсортированном по невозрастанию массиве стоял бы вторым).
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,579
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();
}
0
22.01.2014, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 12:51
Привет! Вот еще темы с ответами:

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

нахождение пикселя RGBA из второго пикселя и их суммы - C++
Собственно вопрос уже в названии, но он мало относится к С++, больше к графике. если параметры RGBA варьируются от 0 до 255. Допустим у...

Как из первого класса достучаться до объекта второго, а из второго до метода первого? - C++
Есть два класса. Как можно из drawCircle достучаться до x,y,R, и из DrawNCirles дстучаться до drawCircle? class Data { public: int...

Выходной поток первого числа, второго , суммы первого и второго чисел - C++
Здравствуйте! Помогите пожалуйста написать программу, которая через стандартный входной поток принимает текстовые строки, в каждой из...


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

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

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