Всем привет!
Для меня решение 6-ой задачи из ОГЭ по информатике, как показывали друзья и учителя, всегда было проблемой. Не дружу я с листком и бумагой - такой уж я зумер. Поэтому решил написать "шаблон" для решения задачи на своём любимом C++ (мой друг попросил написать ещё на Python, поэтому тут шаблон будет представлен на двух языках) и поделиться им здесь.
// C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> INPUT = { {13, 2},{11, 12},{-12, 12},{2, -2},{-10, -10},{6, -5},{2, 8},{9, 10},{1, 13} }; // поменять под задачу
int main() {
int maxx = -9999;
int minn = 9999;
int A=0;
// найти максимальное и минимальное число из всех
for (auto i : INPUT) {
maxx = (*max_element(i.begin(), i.end())>=maxx ) ? *max_element(i.begin(), i.end()) : maxx;
minn = (*min_element(i.begin(), i.end())<=minn ) ? *min_element(i.begin(), i.end()) : minn;
}
A = minn;
int ys=0, ns=0;
for (int i=0; i<maxx-minn+1; i++) {
cout<<"A = "<<A<<endl;
for (auto j : INPUT) {
if (j[0]>A || j[1]>12) { // поменять под задачу
cout<<"Y ";
ys++;
}
else {
cout<<"N ";
ns++;
}
}
cout<<endl<<"Ys = "<<ys<<"; Ns = "<<ns<<endl;
cout<<endl;
ys=0;
ns=0;
A++;
}
}
# Python
INPUT = [ [13, 2],[11, 12],[-12, 12],[2, -2],[-10, -10],[6, -5],[2, 8],[9, 10],[1, 13] ] # поменять под задачу
maxx=-9999
minn=9999
def ifBetter(inputN, isPos, arr): # -1-найти минимальное; 1-найти максимальное
maximus = max(arr)
minimus = min(arr)
if isPos>0:
if inputN>=maximus:
return inputN
else :
return maximus
if isPos<0:
if inputN<=minimus:
return inputN
else :
return minimus
# найти максимальное и минимальное число из всех
for i in INPUT:
maxx = ifBetter(maxx, 1, i)
minn = ifBetter(minn, -1, i)
A = minn
ys=0
ns=0
for i in range(maxx-minn+1):
print("A =",A)
for j in INPUT:
if j[0]>A or j[1]>12: # поменять под задачу
print("Y", end=" ")
ys+=1
else:
print("N", end=" ")
ns+=1
print("Ys =", ys,"; Ns =",ns)
ys=0
ns=0
A+=1
Пояснения
! НА ФОТО С КОДОМ C++ НАХОДИТСЯ ЛИБО СЛЕВА, ЛИБО СВЕРХУ, А PYTHON ЛИБО СПРАВА, ЛИБО СНИЗУ
Разберу представленный код на примере задачи, которая была у меня :
В самом начале нам надо заполнить двухмерный массив числами из данного в задаче.
Далее мы создаем две переменных для минимального числа и максимального.
Максимальное приравниваем к -9999, так как надо сделать так, чтобы при сравнении первое число из массива точно стало максимальным, аналогично с минимальным, но там уже берем число побольше.
В последствии, мы присваиваем А значение минимальной переменной (в данном случае -12). К этому сначению мы будем прибавлять 1 в цикле, пока А не станет максимальным (в данном случае 13). Чтобы понять, сколько раз надо прибавить 1 к А, надо в цикле указать цисло повтором равное максимальное число - минимальное число + 1. (чтобы сделать проверку когда А будет равно 13)
В методах нахождения максимального и минимального из всех чисел языки разнятся.
На Python я написал небольшую функцию
Ввод в функцию : inputN - число, isPos - минимальное или максимальное, arr - массив в котором искать
В C++ есть функция из библиотеки <algorithm> - *max_element(ARRAY.begin(), ARRAY.end())
С помощью итераторов в цикле проходимся по всем под-массивам в массиве сравнивая наши переменные с нынешним числом (в Python это делает функия ifBetter(), а в цикле просто присваевается значение) :
После этого присваиваем переменной А минимальное значение.
Далее идет основной цикл. В нем мы с каждым повтором прибавляем к А единичку. В основном цикле идет второй, чтобы делать проверку из задания. Тут уже все просто - если верно, то выводим "Y", иначе "N".
Я добавил счётчик с помощью переменных ys и ns. Они выводят количество ДА и НЕТ в конце цикла 1.
Таким образом в консоли мы получаем следующее :
Я показал не весь вывод консоли
Теперь просто надо посмотреть, что требуют в условии.
Указываем 13, а в ответе :
Надеюсь я понятно объяснил, как и что работает.
Спасибо за внимание! Пока!