Помогите решить задачу по программированию на языке c++ используя цикл while.
Текст задачи:
Напишите программу, которая в последовательности целых чисел определяет сумму двух наибольших и сумму двух наименьших. Программа должна вывести две этих суммы в указанном порядке. Программа получает на вход целые числа, количество введённых чисел не известно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введённые числа по модулю не превышают 30 000. В последовательности не менее двух чисел.
Просьба с подробным объяснение.
C/C++
Помогите решить задачу по программированию
Всего 1000 чисел? Тупо отсортируй массив и выведи суммы двух первых и двух последних элементов.
А while использовать, например, для ввода значений массива.
А while использовать, например, для ввода значений массива.
#include <iostream>
#include <cmath>
#include <limits>
using namespace std;
class Data {
public:
Data() : max({ mn, mn }), min({ mx, mx }) {}
int sum_max()const {
return max.first + max.second;
}
int sum_min()const {
return min.first + min.second;
}
void set(int value) {
if (max.first < value) {
max.second = max.first;
max.first = value;
} else if (max.second < value) {
max.second = value;
}
if (min.first > value) {
min.second = min.first;
min.first = value;
} else if (min.second > value) {
min.second = value;
}
}
private:
pair<int, int> max;
pair<int, int> min;
inline static const auto mn = numeric_limits<int>::min();
inline static const auto mx = numeric_limits<int>::max();
};
int main() {
const auto n = 1000;
const auto m = 30000;
int x;
Data data;
auto i = 0;
while (true) {
cout << ">>> ";
cin >> x;
if (x == 0) {
if (i < 2) continue;
break;
}
if (abs(x) > m) continue;
data.set(x);
if (++i == n) break;
}
const auto sum_max = data.sum_max();
cout << "<<< " << sum_max << '\n';
const auto sum_min = data.sum_min();
cout << "<<< " << sum_min << '\n';
}
#include <cmath>
#include <limits>
using namespace std;
class Data {
public:
Data() : max({ mn, mn }), min({ mx, mx }) {}
int sum_max()const {
return max.first + max.second;
}
int sum_min()const {
return min.first + min.second;
}
void set(int value) {
if (max.first < value) {
max.second = max.first;
max.first = value;
} else if (max.second < value) {
max.second = value;
}
if (min.first > value) {
min.second = min.first;
min.first = value;
} else if (min.second > value) {
min.second = value;
}
}
private:
pair<int, int> max;
pair<int, int> min;
inline static const auto mn = numeric_limits<int>::min();
inline static const auto mx = numeric_limits<int>::max();
};
int main() {
const auto n = 1000;
const auto m = 30000;
int x;
Data data;
auto i = 0;
while (true) {
cout << ">>> ";
cin >> x;
if (x == 0) {
if (i < 2) continue;
break;
}
if (abs(x) > m) continue;
data.set(x);
if (++i == n) break;
}
const auto sum_max = data.sum_max();
cout << "<<< " << sum_max << '\n';
const auto sum_min = data.sum_min();
cout << "<<< " << sum_min << '\n';
}
#include <iostream>
using std::cin; using std::cout; //вместо usung namespace std говорят так круче
class min_max_repositorium //контейнер для хранения двух элементов
{
int init = 2; //счетчик для начального заполнения
int mini[2]{}; //хранение минимальных чисел
int maxi[2]{}; //хранение максимальных чисел
public:
void push_back(const int& x) //функция наполенения контейнера
{
if (init) { mini[init - 1] = maxi[init - 1] = x; init--; } //первые два числа записываются напрямую
x < (mini[1] > mini[0] ? mini[1] : mini[0]) ? (mini[1] > mini[0] ? mini[1] : mini[0]) = x : NULL;
//если число меньше максимального из двух минимальных - заменяем его
x > (maxi[1] < maxi[0] ? maxi[1] : maxi[0]) ? (maxi[1] < maxi[0] ? maxi[1] : maxi[0]) = x : NULL;
//если число больше минимального из двух максимальных - заменяем его
}
const int sum_max() const { return maxi[0] + maxi[1]; } //вывод суммы двух максимальных
const int sum_min() const { return mini[0] + mini[1]; } //вывод суммы двух минимальных
};
int main()
{
int i, numer{}; //инициализация числа и счетчика введенных цифр
min_max_repositorium elementh; //создаем хранилище элементов
while (cin >> i,i&&numer<1000&&abs(i)<=30000) elementh.push_back(i);
//ввод числа i и проверка условий цикла через запятую
cout << "Summa 2 max = " << elementh.sum_max() << "\n"; // вывод результатов
cout << "Summa 2 min = " << elementh.sum_min() << "\n";
}
using std::cin; using std::cout; //вместо usung namespace std говорят так круче
class min_max_repositorium //контейнер для хранения двух элементов
{
int init = 2; //счетчик для начального заполнения
int mini[2]{}; //хранение минимальных чисел
int maxi[2]{}; //хранение максимальных чисел
public:
void push_back(const int& x) //функция наполенения контейнера
{
if (init) { mini[init - 1] = maxi[init - 1] = x; init--; } //первые два числа записываются напрямую
x < (mini[1] > mini[0] ? mini[1] : mini[0]) ? (mini[1] > mini[0] ? mini[1] : mini[0]) = x : NULL;
//если число меньше максимального из двух минимальных - заменяем его
x > (maxi[1] < maxi[0] ? maxi[1] : maxi[0]) ? (maxi[1] < maxi[0] ? maxi[1] : maxi[0]) = x : NULL;
//если число больше минимального из двух максимальных - заменяем его
}
const int sum_max() const { return maxi[0] + maxi[1]; } //вывод суммы двух максимальных
const int sum_min() const { return mini[0] + mini[1]; } //вывод суммы двух минимальных
};
int main()
{
int i, numer{}; //инициализация числа и счетчика введенных цифр
min_max_repositorium elementh; //создаем хранилище элементов
while (cin >> i,i&&numer<1000&&abs(i)<=30000) elementh.push_back(i);
//ввод числа i и проверка условий цикла через запятую
cout << "Summa 2 max = " << elementh.sum_max() << "\n"; // вывод результатов
cout << "Summa 2 min = " << elementh.sum_min() << "\n";
}
Похожие вопросы
- Помогите решить задачу по программированию на C++
- Можете помочь решить задачу по программированию.
- Помогите решить задачу по программированию C++
- Помогите решить задачу на языке программирования С++
- Помогите решить задачу на языке программирования Си, пожалуйста
- Программирование C++ Помогите решить задачу
- Помогите решить задачу по C++!
- Помогите решить задачу пожалуйста, в C++
- Помогите решить задачу на c++
- Помогите решить задачу на С++ (мне не совсем ясен смысл задания)