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