Задание 17. Информатика. ЕГЭ. Поляков-7681
- Просмотры: 137
- Изменено: 24 ноября 2024
(К. Багдасарян) В файле содержится последовательность натуральных чисел, не превышающих \(1000\). Определите количество пар последовательности, у которых старшие разряды обоих чисел совпадают, хотя бы одно из чисел оканчивается на \(7\) и является трёхзначным числом, а их сумма меньше максимального элемента последовательности, оканчивающегося на \(7\). В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Решение:
Python
def mx_raz(n):
while n > 9:
n //= 10
return n
def valid(a, b):
return mx_raz(a) == mx_raz(b) and any(x % 10 == 7 and 99 < x < 1000 for x in [a, b])
base = ''
nums = [int(x) for x in open(base + '17.txt')]
max_el = max([x for x in nums if x % 10 == 7])
max_sum, q = 0, 0
for x, y in zip(nums, nums[1:]):
if valid(x, y) and x + y < max_el:
q += 1
max_sum = max(max_sum, x + y)
print(q, max_sum)
C++
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
int mx_raz(int n) {
while (n > 9)
n /= 10;
return n;
}
bool valid(int a, int b) {
return mx_raz(a) == mx_raz(b) && (a % 10 == 7 && a > 99 && a < 1000 ||
b % 10 == 7 && b > 99 && b < 1000);
}
int32_t main() {
string base = "";
vector<int> nums;
int max_el = 0, max_sum = 0, q = 0;
ifstream in(base + "17.txt");
while(!in.eof()) {
int t;
in >> t;
nums.push_back(t);
if (t % 10 == 7)
max_el = max(max_el, t);
}
for(int i = 0; i < nums.size() - 1; i++)
if (valid(nums[i], nums[i+1]) && nums[i] + nums[i+1] < max_el) {
q++;
max_sum = max(max_sum, nums[i] + nums[i+1]);
}
cout << q << " " << max_sum << '\n';
}
Ответ: \(3 \,\, 1027\)