Другие языки программирования и технологии

Количество максимальных (C++) как решить без массивов?

Дана последовательность целых чисел, оканчивающаяся нулём. Определите, сколько чисел в этой последовательности равны её наибольшему элементу. Ноль числом последовательности не считается.

Формат входных данных

Вводится не более чем 10000 целых чисел, каждое из которых не превосходит по модулю 2^15−1. После последнего числа вводится 0.
Формат выходных данных

Требуется вывести количество чисел, равных максимуму.
Примечания

Использовать массивы ЗАПРЕЩЕНО!

Примеры

входные данные
1
7
9
0
выходные данные
1

входные данные
1
3
3
1
0
выходные данные
2
#include <iostream>
using namespace std;
class Sequence {
public:
explicit Sequence(const short terminator = 0)
: terminator_(terminator), max_(numeric_limits<short>::min(), 0u) {}
bool add(const short value) {
if (max_.first < value) {
if (value == terminator_) return false;
max_.first = value;
max_.second = 1;
} else if (max_.first == value) {
++max_.second;
}
return true;
}
auto max()const {
return max_;
}
private:
short terminator_;
pair<short, size_t> max_;
};
int main() {
Sequence seq;
short value;
do cin >> value; while (seq.add(value));
const auto result = seq.max();
cout << '\n' << result.second << '\n';
system("pause");
}
Angel Sequriti
Angel Sequriti
56 571
Лучший ответ
Амангазы Дыбысов можно попроще код, просто такое еще не проходил:)
#inсludе <iоstrеаm>
using nаmеsрасе std;
int mаin() {
 int соunt = 1, mах, х;
 сin >> х;
 mах = х;
 dо {
  сin >> х;
  if (х > mах) {
   mах = х;
   соunt = 1;
  } еlsе if (х == mах)
   соunt++;
 }whilе (х);
 соut << "Мах = " << mах << "; Соunt = " << соunt;
 сin.gеt();
 rеturn 0;
}
Ринат Заламаев
Ринат Заламаев
73 120
Амангазы Дыбысов Тест #21

Input
пусто
Correct
10000
Output
1
Checker

wrong answer expected 10000, found 1
#include < iostream >
#include < string >
#include < sstream >

using namespace std;

void main()
{
setlocale(LC_ALL, "rus");
cout << "Введите последовательность чисел, между коими пробелы ";
string str;
getline(cin, str);
stringstream ss(str);
stringstream sd(str);
int max = 0;
bool b = false;
for (; ss;)
{
int t;
ss >> t;
if (t == 0)
break;
if (!b)
max = t;
if (t > max)
max = t;
b = true;
}
unsigned sum = 0;
for (; sd;)
{
int t;
sd >> t;
if (t == 0)
break;
if (t == max)
++sum;
}
cout << "Количество элементов последовательнисти по значению равных максимальному " << sum << endl;
cin.get(); cin.get();
}