Орієнтовні розв'язки практичної роботи № 7 тренінгу Python
Всі задачі 100 балів.
Задача A
Задається N цілих додатних чисел не більших 1000. Знайти суму чисел даної
послідовності, які мають більше двох дільників, не враховуючи 1 та самого
числа.
Задача A
Задається N цілих додатних чисел не більших 1000. Знайти суму чисел даної
послідовності, які мають більше двох дільників, не враховуючи 1 та самого
числа.
Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться самі числа.
Формат вихідних данихУ вихідний потік вивести суму чисел, що відповідають умові задачі.Приклад вхідних даних5
101 100 10 150 20Приклад вихідних даних270
def kilk_dev(a):
s = 0
for i in range(1, a + 1):
if a % i == 0:
s += 1
return s
n = int(input())
l = list(map(int, input().split()))
su = 0
for x in l:
if kilk_dev(x) > 4:
su += x
print(su)
Задача B
Задається N цілих додатних чисел не більших 1000. Знайти суму простих чисел,
що є у даній послідовності.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести суму чисел, що відповідають умові задачі.Приклад вхідних даних5
1 2 3 4 5Приклад вихідних даних10
def pr(a):
if a < 2:
return False
for i in range(2, int(a**0.5) + 1):
if a % i == 0:
return False
return True
n = int(input())
l = list(map(int, input().split()))
s = 0
for x in l:
if pr(x):
s += x
print(s)
Задача C
Серед N цілих додатних чисел не більших 30000 знайти кількість майже
простих чисел. Назвемо ті числа майже простими, які мають лише один дільник
і той простий.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести кількість майже простих чисел.Приклад вхідних даних5
16 20 30 4 25Приклад вихідних даних2
def not_pr(a):
if a < 2:
return False
for i in range(2, int(a**0.5) + 1):
if a % i == 0:
return True
return False
def k_dev(a):
s = 0
for i in range(1, a + 1):
if a % i == 0:
s += 1
return s
n = int(input())
l = list(map(int, input().split()))
su = 0
for x in l:
if not_pr(x):
if k_dev(x) == 3:
su += 1
print(su)
Задача D
Серед N цілих додатних чисел не більших 1000 знайти числа з найбільшою
сумою цифр та найменшою. Якщо таких чисел є декілька, то слід вибирати ті,
що ідуть у переліку першими.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести два числа через пропуск, що відповідають умові
задачі. Спочатку вивести число з найбільшою сумою цифр, а потім з
найменшою. Якщо є два числа, що задовільняють одну із умов, то слід
виводити те, що іде першим у порядку слідування.Приклад вхідних даних5
12 10 101 1000 102Приклад вихідних даних12 10
def s_csifr(n):
n = str(n)
s = 0
for x in n:
s += int(x)
return s
n = int(input())
l = list(map(int, input().split()))
L = []
for y in l:
L.append(s_csifr(y))
i = L.index(max(L))
j = L.index(min(L))
print(l[i],l[j])
Задача E
Знайти найбільший спільний дільник даних чисел.Формат вхідних данихУ першому рядку задано число N (0 < N < 1000), у наступному рядку через
пропуск задаються самі цілі числа не більші 2*10^9.Формат вихідних данихУ вихідний потік вивести число, що є найбільшим спільним дільником для
даних чисел.Приклад вхідних даних4
10 22 30 50Приклад вихідних даних2
def nd(a,b):
ost = a % b
while ost != 0:
a = b
b = ost
ost = a % b
return b
n = int(input())
l = list(map(int, input().split()))
r = l[0]
for i in range(1, n):
r = nd(r, l[i])
print(r)
Задача F
Описати функцію DigitCount(K) цілого типу, яка знаходить кількість цифр
цілого додатного числа K. З допомогою цієї функції для кожного з N чисел K
вивести його кількість цифр.Формат вхідних данихУ стандартному потоці перший рядок містить N (N < 1000). У наступному
рядку через пропуск знаходяться числа K (K < 2*10^9)Формат вихідних данихУ стандартний потік в окремих рядках для кожного K вивести кількість його
цифр.Приклад вхідних даних3
4 1521 36009Приклад вихідних даних145
def k_csifr(a):
return len(str(a))
n = int(input())
l = list(map(int, input().split()))
for x in l:
print(k_csifr(x))
Задача G
Дано функцію піднесення до степеня. Знайти значення
функції, для даних а та n.Формат вихідних данихУ стандартному вхідному потоці дано цілі а та n (0<a<10, 0<=n<50).Формат вихідних данихУ вихідний потік вивести значення функції. Гарантується, що результат не буде
перевищувати 1018.Приклад вхідних даних2 4Приклад вихідних даних16
def power(a,n):
if n == 0:
return 1
else:
return a*power(a,n-1)
a,n = map(int,input().split())
print(power(a,n))
Задача H
Знайти значення функціїФормат вихідних данихУ стандартному вхідному потоці дано ціле n (0<n<50).Формат вихідних данихУ стандартний потік вивести результат.Приклад вхідних даних2Приклад вихідних даних4
def power_2(n):
if n == 1:
return 2
else:
return 2*power_2(n-1)
n = int(input())
print(power_2(n))
Задача I
Знайти найбільший спільний дільник двох натуральних чисел n, m за
алгоритмом Евкліда.Формат вихідних данихУ вхідному потоці задається через пропуск два цілих числа не більших 109.Формат вихідних данихУ стандартний потік вивести результат.Приклад вхідних даних6 9Приклад вихідних даних3
def gcd(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
return(a)
n, m = map(int, input().split())
print(gcd(n, m))
Дивно, але на 100 балів пройшов варіант без рекурсії.
Задача J
Знайти значення «91-функції Мак-Карті», яка задається таким чином:Формат вихідних данихУ вхідному потоці задається ціле додатне N<200.Формат вихідних данихУ вихідний потік вивести значення функції.Приклад вхідних даних199Приклад вихідних даних189
def f_91(n):
if n > 100:
return n - 10
else:
return f_91(f_91(n + 11))
n = int(input())
print(f_91(n))
101 100 10 150 20Приклад вихідних даних270
def kilk_dev(a):
s = 0
for i in range(1, a + 1):
if a % i == 0:
s += 1
return s
n = int(input())
l = list(map(int, input().split()))
su = 0
for x in l:
if kilk_dev(x) > 4:
su += x
print(su)
Задача B
Задається N цілих додатних чисел не більших 1000. Знайти суму простих чисел,
що є у даній послідовності.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести суму чисел, що відповідають умові задачі.Приклад вхідних даних5
1 2 3 4 5Приклад вихідних даних10
def pr(a):
if a < 2:
return False
for i in range(2, int(a**0.5) + 1):
if a % i == 0:
return False
return True
n = int(input())
l = list(map(int, input().split()))
s = 0
for x in l:
if pr(x):
s += x
print(s)
Серед N цілих додатних чисел не більших 30000 знайти кількість майже
простих чисел. Назвемо ті числа майже простими, які мають лише один дільник
і той простий.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести кількість майже простих чисел.Приклад вхідних даних5
16 20 30 4 25Приклад вихідних даних2
def not_pr(a):
if a < 2:
return False
for i in range(2, int(a**0.5) + 1):
if a % i == 0:
return True
return False
def k_dev(a):
s = 0
for i in range(1, a + 1):
if a % i == 0:
s += 1
return s
n = int(input())
l = list(map(int, input().split()))
su = 0
for x in l:
if not_pr(x):
if k_dev(x) == 3:
su += 1
print(su)
Серед N цілих додатних чисел не більших 1000 знайти числа з найбільшою
сумою цифр та найменшою. Якщо таких чисел є декілька, то слід вибирати ті,
що ідуть у переліку першими.Формат вхідних данихУ першому рядку задано число N (N<=1000). У наступному рядку містяться
самі числа.Формат вихідних данихУ вихідний потік вивести два числа через пропуск, що відповідають умові
задачі. Спочатку вивести число з найбільшою сумою цифр, а потім з
найменшою. Якщо є два числа, що задовільняють одну із умов, то слід
виводити те, що іде першим у порядку слідування.Приклад вхідних даних5
12 10 101 1000 102Приклад вихідних даних12 10
def s_csifr(n):
n = str(n)
s = 0
for x in n:
s += int(x)
return s
n = int(input())
l = list(map(int, input().split()))
L = []
for y in l:
L.append(s_csifr(y))
i = L.index(max(L))
j = L.index(min(L))
print(l[i],l[j])
Задача E
Знайти найбільший спільний дільник даних чисел.Формат вхідних данихУ першому рядку задано число N (0 < N < 1000), у наступному рядку через
пропуск задаються самі цілі числа не більші 2*10^9.Формат вихідних данихУ вихідний потік вивести число, що є найбільшим спільним дільником для
даних чисел.Приклад вхідних даних4
10 22 30 50Приклад вихідних даних2
def nd(a,b):
ost = a % b
while ost != 0:
a = b
b = ost
ost = a % b
return b
n = int(input())
l = list(map(int, input().split()))
r = l[0]
for i in range(1, n):
r = nd(r, l[i])
print(r)
Задача F
Описати функцію DigitCount(K) цілого типу, яка знаходить кількість цифр
цілого додатного числа K. З допомогою цієї функції для кожного з N чисел K
вивести його кількість цифр.Формат вхідних данихУ стандартному потоці перший рядок містить N (N < 1000). У наступному
рядку через пропуск знаходяться числа K (K < 2*10^9)Формат вихідних данихУ стандартний потік в окремих рядках для кожного K вивести кількість його
цифр.Приклад вхідних даних3
4 1521 36009Приклад вихідних даних145
def k_csifr(a):
return len(str(a))
n = int(input())
l = list(map(int, input().split()))
for x in l:
print(k_csifr(x))
Задача G
Дано функцію піднесення до степеня. Знайти значення
функції, для даних а та n.Формат вихідних данихУ стандартному вхідному потоці дано цілі а та n (0<a<10, 0<=n<50).Формат вихідних данихУ вихідний потік вивести значення функції. Гарантується, що результат не буде
перевищувати 1018.Приклад вхідних даних2 4Приклад вихідних даних16
def power(a,n):
if n == 0:
return 1
else:
return a*power(a,n-1)
a,n = map(int,input().split())
print(power(a,n))
Задача H
Знайти значення функціїФормат вихідних данихУ стандартному вхідному потоці дано ціле n (0<n<50).Формат вихідних данихУ стандартний потік вивести результат.Приклад вхідних даних2Приклад вихідних даних4
def power_2(n):
if n == 1:
return 2
else:
return 2*power_2(n-1)
n = int(input())
print(power_2(n))
Знайти найбільший спільний дільник двох натуральних чисел n, m за
алгоритмом Евкліда.Формат вихідних данихУ вхідному потоці задається через пропуск два цілих числа не більших 109.Формат вихідних данихУ стандартний потік вивести результат.Приклад вхідних даних6 9Приклад вихідних даних3
def gcd(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
return(a)
n, m = map(int, input().split())
print(gcd(n, m))
Дивно, але на 100 балів пройшов варіант без рекурсії.
Задача J
Знайти значення «91-функції Мак-Карті», яка задається таким чином:Формат вихідних данихУ вхідному потоці задається ціле додатне N<200.Формат вихідних данихУ вихідний потік вивести значення функції.Приклад вхідних даних199Приклад вихідних даних189
def f_91(n):
if n > 100:
return n - 10
else:
return f_91(f_91(n + 11))
n = int(input())
print(f_91(n))
Немає коментарів:
Дописати коментар