Еще одно очень красивое и очень странное решение через словари.
n = int(input())
print({1<=n<=4: "Начальная школа",
5<=n<=9: "Среднее звено",
10<=n<=11: "Старшее звено"}[True])
Здесь мы создаем неименованный словарь, который в качестве ключа использует условное выражение, а в качестве значения - соответствующую этому выражению строку.
Когда мы тут же передаем ему в качестве ключа True, словарь начнет проверять ключи и вернет именно то значение, у которого выражение-ключ было истинным.
Решение 1:
nominative = 1 # окончания им.падеж: гриб
generative = [2, 3, 4] # список окончаний род.падеж: гриба
plural_generative = [5, 6, 7, 8, 9, 0] # список окончаний род.падеж множ-го: грибов
for number in range(0, 51): # цикл с значением от 0 до 51
"""number % 10 возвращает последнюю цифру из числа"""
if (number % 10) == nominative:
print(f"{number} гриб")
elif (number % 10) in generative:
print(f"{number} гриба")
elif (number % 10) in plural_generative:
print(f"{number} грибов")
Решение 2:
nominative = 1 # окончания им.падеж: гриб
generative = [2, 3, 4] # список окончаний род.падеж: гриба
for number in range(0, 51): # цикл с значением от 0 до 51
"""number % 10 возвращает последнию цифру из числа"""
if (number % 10) == nominative:
print(f"{number} гриб")
elif (number % 10) in generative:
print(f"{number} гриба")
else:
print(f"{number} грибов")
Объяснение:
В комментариях.
#include <iostream>
using namespace std;
int main() {
cout << "N: ";
int N; cin >> N;
int a[N+1];
int max = 0;
int counter = 0;
for(int i = 1; i<=N; ++i) {
cin >> a[i];
if(a[i]>max) {
max = a[i];
}
}
for(int i = 1; i<=N; ++i) {
if(a[i]==max) {
++counter;
}
}
cout << "Max element: " << max << " met " << counter << " times";
}