Задание 17. Информатика. ЕГЭ. Поляков-7564
- Просмотры: 530
- Изменено: 24 ноября 2024
(ЕГЭ-2024) В файле содержится последовательность целых чисел, не превышающих по модулю \(100~000\). Определите количество троек элементов последовательности, в которых хотя бы два элемента из трёх оканчиваются на \(7\) и являются четырёхзначными числами, а сумма всех элементов тройки больше максимального элемента последовательности, оканчивающегося на \(7\) и являющегося четырехзначным числом. В ответе запишите количество найденных троек, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три подряд идущих элемента последовательности.
Решение:
Python
v = [int(x) for x in open('17-409.txt')]
mx7 = max([x for x in v if abs(x) % 10 == 7 and 999 < abs(x) < 10000])
mxsum = -10**10
q = 0
for x, y, z in zip(v, v[1:], v[2:]):
t = int(abs(x) % 10 == 7 and 999 < abs(x) < 10000)
t += int(abs(y) % 10 == 7 and 999 < abs(y) < 10000)
t += int(abs(z) % 10 == 7 and 999 < abs(z) < 10000)
s = sum([x, y, z])
if t > 1 and s > mx7:
q += 1
mxsum = max(mxsum, s)
print(q, mxsum)
C++
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int32_t main() {
vector<int> v;
ifstream in("17-409.txt");
int tmp, mx7 = -1000 * 1000, q = 0, mxsum = -1000 * 1000;
while (!in.eof())
{
in >> tmp;
v.push_back(tmp);
if (abs(tmp) % 10 == 7 && abs(tmp) > 999 && abs(tmp) < 10000)
mx7 = max(mx7, tmp);
}
for (int i = 0; i < v.size() - 2; i++) {
int x = int(abs(v[i]) % 10 == 7 && abs(v[i]) > 999 && abs(v[i]) < 10000);
x += int(abs(v[i+1]) % 10 == 7 && abs(v[i+1]) > 999 && abs(v[i+1]) < 10000);
x += int(abs(v[i+2]) % 10 == 7 && abs(v[i+2]) > 999 && abs(v[i+2]) < 10000);
int s = v[i] + v[i+1] + v[i+2];
if(x > 1 && s > mx7) {
q++;
mxsum = max(mxsum, s);
}
}
cout << q << " " << mxsum << '\n';
}
Ответ: \(6 \,\, 84385\)
Видеоразбор