Задание 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\)