Задание 17. Информатика. ЕГЭ. Поляков-7683

Просмотры: 157
Изменено: 24 ноября 2024

(К. Багдасарян) В файле содержится последовательность натуральных чисел, не превышающих \(1000\). Определите количество пар элементов последовательности, в которых ровно одно число из пары не меньше, чем минимальный элемент последовательности, кратный \(3\), но не больше, чем максимальный элемент последовательности, оканчивающийся на \(3\). В ответе запишите количество найденных пар, затем минимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два подряд идущих элемента последовательности.

Файл с данными

Решение:

Python


base = ''
nums = [int(x) for x in open(base + '17.txt')]
min3 = min([x for x in nums if x % 3 == 0])
max3 = max([x for x in nums if x % 10 == 3])
q = 0
min_sum = 10000000

for p in zip(nums, nums[1:]):
    if sum(min3 <= x <= max3 for x in p) % 2:
        q += 1
        min_sum = min(min_sum, sum(x**2 for x in p))

print(q, min_sum)

C++


#include<iostream>
#include<fstream>
#include<vector>
#include<string>

using namespace std;

int min3 = 1000000;
int max3 = 0;

bool valid(int x, int y) {
    return (x >= min3 && x <= max3) ^ (y >= min3 && y <= max3);
}

int32_t main() {
    string base = "";
    int q = 0, min_sum = 1000000;
    fstream in(base + "17.txt");
    vector<int> v;

    while(!in.eof()) {
        int t;
	in >> t;
        v.push_back(t);
        if (t % 3 == 0)  min3 = min(min3, t);
        if (t % 10 == 3) max3 = max(max3, t);
    }

    for(int i = 0; i < v.size() - 1; i++)
        if (valid(v[i], v[i+1])) {
            q++;
            min_sum = min(min_sum, v[i]*v[i] + v[i+1]*v[i+1]);
        }
    cout << q << " " << min_sum << endl;
}

Ответ: \(24 \,\, 10309\)