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

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

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

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

Решение:

Python


from math import gcd

base = ''
nums = [int(x) for x in open(base + '17.txt')]
min_el = min(nums)
max_sum = 0
q = 0

for x, y in zip(nums, nums[1:]):
    if gcd(x, y) % 10 == min_el % 10:
        q += 1
        max_sum = max(x + y, max_sum)

print(q, max_sum)

C++


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

using namespace std;

int gcd(int x, int y) {
    while (x != y) {
        if (x > y) {
            int t = x % y;
            x = (t) ? t : y;
        }
	else {
            int t = y % x;
            y = (t) ? t : x;
        }
    }
    return x;
}

int32_t main() {
    vector<int> nums;
    string base = "";
    ifstream in(base + "17.txt");
    int min_el = 1000000, max_sum = 0, q = 0;
    while (!in.eof()) {
        int t;
	in >> t;
        nums.push_back(t);
        min_el = min(min_el, t);
    }
    for(int i = 0; i < nums.size() - 1; i++)
        if (gcd(nums[i], nums[i+1]) % 10 == min_el % 10) {
            q++;
            max_sum = max(max_sum, nums[i] + nums[i+1]);
        }

    cout << q << " " << max_sum  << endl;
}

Ответ: \(11 \,\, 1360\)