Нужно решение в С++ Дана последовательность целых чисел. Требуется найти подпоследовательность заданной последовательности с максимальным модулем суммы входящих в нее чисел. Напомним, что модуль целого числа x равняется x, если x ≥ 0 и -x, если x < 0. Входные данные Первая строка входного файла INPUT.TXT содержит натуральное число n (1 ≤ n ≤ 10000) - длину последовательности. Во второй строке записаны n целых чисел, по модулю не превосходящих 10000. Выходные данные В первой строке выходного файла OUTPUT.TXT выведите длину l выбранной вами подпоследовательности. Во второй строке должны быть записаны l различных чисел, разделенных пробелами - номера выбранных членов последовательности.
#include <iostream> #include <vector> #include <cmath> int main() { int n; std::cin >> n; std::vector<int> sequence(n); for (int i = 0; i < n; i++) { std::cin >> sequence[i]; } int max_sum = 0; int current_sum = 0; int start_index = 0; int end_index = 0; int current_start_index = 0; for (int i = 0; i < n; i++) { current_sum += sequence[i]; if (std::abs(current_sum) > std::abs(max_sum)) { max_sum = current_sum; start_index = current_start_index; end_index = i; } if (current_sum < 0) { current_sum = 0; current_start_index = i + 1; } } std::cout << end_index - start_index + 1 << std::endl; for (int i = start_index; i <= end_index; i++) { std::cout << i + 1 << " "; } return 0; }
Эта программа сначала считывает длину последовательности и саму последовательность из входного файла, затем находит подпоследовательность с максимальным модулем суммы входящих в нее чисел и выводит ее длину и номера элементов.
Пример решения на C++:
#include <iostream>#include <vector>
#include <cmath>
int main() {
int n;
std::cin >> n;
std::vector<int> sequence(n);
for (int i = 0; i < n; i++) {
std::cin >> sequence[i];
}
int max_sum = 0;
int current_sum = 0;
int start_index = 0;
int end_index = 0;
int current_start_index = 0;
for (int i = 0; i < n; i++) {
current_sum += sequence[i];
if (std::abs(current_sum) > std::abs(max_sum)) {
max_sum = current_sum;
start_index = current_start_index;
end_index = i;
}
if (current_sum < 0) {
current_sum = 0;
current_start_index = i + 1;
}
}
std::cout << end_index - start_index + 1 << std::endl;
for (int i = start_index; i <= end_index; i++) {
std::cout << i + 1 << " ";
}
return 0;
}
Эта программа сначала считывает длину последовательности и саму последовательность из входного файла, затем находит подпоследовательность с максимальным модулем суммы входящих в нее чисел и выводит ее длину и номера элементов.