Напишите программу на C++, которая сократит полный список номеров бракованных изделий путем замены подряд идущих чисел

  • 55
Напишите программу на C++, которая сократит полный список номеров бракованных изделий путем замены подряд идущих чисел интервалом. В вашей компании, занимающейся производством компьютерных комплектующих, каждое изделие получает последовательный номер от 1 до N. После проверки в отделе контроля качества, изделие либо продается, либо добавляется в список бракованных изделий и списывается. Однако, иногда список бракованных изделий получается слишком длинным. В этом случае несколько подряд идущих чисел должны быть заменены интервалом, где первое и последнее число указываются через тире.
Магнитный_Пират
12
Хорошо, чтобы решить эту задачу, мы можем использовать следующий алгоритм:

1. Начните с создания пустого списка для сохранения сокращенных номеров бракованных изделий.

2. Считайте полный список номеров бракованных изделий.

3. Итерируйтесь по списку и сравните каждое число с предыдущим числом.

4. Если очередное число больше предыдущего на 1, добавьте его во временный интервал.

5. Если очередное число не следует за предыдущим числом последовательно, сохраните текущий интервал в сокращенном списке.

6. Повторяйте шаги 4-5 до конца списка.

7. Выведите сокращенный список номеров бракованных изделий, заменяя последовательные числа интервалами через тире.

Ниже приведена программа на языке C++, реализующая описанный алгоритм:

cpp
#include
#include

int main() {
std::vector numbers; // Полный список номеров бракованных изделий
std::vector> reducedList; // Сокращенный список номеров бракованных изделий

int n;
std::cout << "Введите количество бракованных изделий: ";
std::cin >> n;

std::cout << "Введите номера бракованных изделий: ";
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
numbers.push_back(num);
}

int start = numbers[0];
int prev = numbers[0];

for (int i = 1; i < n; i++) {
if (numbers[i] == prev + 1) {
prev = numbers[i];
} else {
reducedList.emplace_back(start, prev);
start = numbers[i];
prev = numbers[i];
}
}

// Добавим последний интервал
reducedList.emplace_back(start, prev);

std::cout << "Сокращенный список номеров бракованных изделий: ";
for (const auto& interval : reducedList) {
if (interval.first == interval.second) {
std::cout << interval.first << " ";
} else {
std::cout << interval.first << "-" << interval.second << " ";
}
}

return 0;
}


После запуска программы, вы должны будете ввести количество бракованных изделий и их номера. Затем программа выведет сокращенный список номеров бракованных изделий с использованием интервалов через тире. Например, если введенные номера были 1, 2, 3, 5, 6, 8, 10, 11, то сокращенный список выглядит следующим образом: 1-3 5-6 8 10-11.

Эта программа будет работать для любого количества бракованных изделий и любых номеров. Она эффективно сократит список, заменяя подряд идущие числа интервалами для удобства чтения.