Задание 17. Информатика. ЕГЭ. Поляков-7680
- Просмотры: 117
- Изменено: 24 ноября 2024
(К. Багдасарян) В файле содержится последовательность натуральных чисел, не превышающих \(1000\). Определите количество пар последовательности, для которых минимальный элемент последовательности, оканчивающийся на \(3\), кратен наибольшему общему делителю пары. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Решение:
Python
from math import gcd
base = ''
nums = [int(x) for x in open(base + '17.txt')]
min_el = min([x for x in nums if x % 10 == 3])
max_sum = 0
q = 0
for x, y in zip(nums, nums[1:]):
if min_el % gcd(x, y) == 0:
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);
if (t % 10 == 3)
min_el = min(min_el, t);
}
for(int i = 0; i < nums.size() - 1; i++)
if (min_el % gcd(nums[i], nums[i+1]) == 0) {
q++;
max_sum = max(max_sum, nums[i] + nums[i+1]);
}
cout << q << " " << max_sum << endl;
}
Ответ: \(14 \,\, 1767\)