Member 13678302 Ответов: 3

Программа для поиска 1-го и 2-го максимального числа между четырьмя числами?


я хочу найти самый большой и 2-й по величине, но второй по величине ответ неверен.

Что я уже пробовал:

#include <iostream>
using namespace std;
int main()
{
	int number, largest = 0, seclargest = 0;
	for (int i = 0; i < 4; i++)
	{
		cout << "Enter Any Four Numbers ";
		cin >> number;
		if (number>largest)
		{
			largest = number;
		}
		if (number > seclargest && number < largest)
		{
			seclargest = number;
		}
	}
		cout << largest << "\n" << seclargest;
	return 0;
}

3 Ответов

Рейтинг:
21

OriginalGriff

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

Итак вам нужны два независимых теста:

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

Это дает вам желаемые результаты, но я бы сказал, что 0-это плохое значение для инициализации. Я бы использовал постоянное значение INT_MIN: Целочисленные Ограничения C++ [^] что даст вам наименьшее возможное значение, которое может быть введено - которое может быть намного меньше нуля!


Maciej Los

Коротко и по существу!

Рейтинг:
14

CPallini

У тебя есть молоток, использовать его:

#include <iostream>
#include <queue>
using namespace std;

int main()
{
  priority_queue<int > pq;
  for (int n=0; n<4; ++n)
  { 
    cout << "please enter  number " << (n+1) << "/4" << endl;
    int x; 
    cin >> x;
    pq.push(x);
  }
  
  cout << "reporting the biggest ones:" << endl;
  for (int n=0; n<2; ++n)
  { 
    cout << pq.top() << endl;
    pq.pop();
  }
}


jeron1

+5, я изначально думал о std::sort и std::unique, но ваше решение более опрятно. Мне нравится, как вы используете контейнеры и алгоритмы.

CPallini

Большое спасибо. :-)

Рейтинг:
0

Patrice T

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

Если программа не дает ожидаемых результатов, что - то не так в программе, самое время обратиться к отладчику.
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
-----
- Изучите один или несколько методов анализа, У. Е. сверху вниз Djikstra способ это хорошее начало.
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]