неділя, 3 листопада 2019 р.

Орієнтовні розв'язки практичної роботи № 7  тренінгу Python

Всі задачі 100 балів.
Задача 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).Формат вихідних данихУ вихідний потік вивести значення функції. Гарантується, що результат не буде
перевищувати 10
18.Приклад вхідних даних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))

Немає коментарів:

Дописати коментар