Главная страница
Навигация по странице:

  • Задача 6: Наименьший положительный элемент списка

  • Задача 7: Сумма чисел в файле (одно число в строке)

  • Задача 8: Сумма чисел в файле (несколько чисел в строке)

  • Задача 9: Неправильные числа Фибоначчи

  • Задача 10: Функция Аккермана

  • Задача 11: k-е простое число Ограничение по времени работы программы: 1 секунда

  • Задача 12: Гипотеза Гольдбаха

  • Задача 13: Количество простых чисел на отрезке

  • Задача 14: Дружественные числа

  • Задача 15: Сортировка пузырьком: количество обменов

  • основы_программирования_на_языке_python. Министерство образования и науки российской федерации федеральное государственное бюджетное образовательное учреждение высшего


    Скачать 208.8 Kb.
    НазваниеМинистерство образования и науки российской федерации федеральное государственное бюджетное образовательное учреждение высшего
    Дата01.02.2022
    Размер208.8 Kb.
    Формат файлаdocx
    Имя файлаосновы_программирования_на_языке_python.docx
    ТипКурсовая
    #348377
    страница3 из 8
    1   2   3   4   5   6   7   8

    Задача 4: Коровы

    Дано число n<100. Закончите фразу “На лугу пасется…” одним из возможных продолжений: “n коров”, “n корова”, “n коровы”, правильно склоняя слово “корова”.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход одно натуральное число n, n<100.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести введенное число n и одно из слов: korov, korova или korovy. Между числом и словом должен стоять ровно один пробел.

    ПРИМЕРЫ

    ВВОД

    ВЫВОД

    1

    1 korova

    2

    2 korovy

    5

    5 korov

    РЕШЕНИЕ

    Слово "коров" выводится, если n заканчивается цифрой 5, 6, 7, 8, 9, 0 или если число десятков в числе n равно 1.

    Слово "корова" выводится, если n заканчивается цифрой 1.

    Слово "коровы" выводится во всех остальных случаях.

    n = int(input())

    if 5 <= n % 10 <= 9 or n % 10 == 0 or n // 10 == 1:
        print(n, "korov")
    elif n % 10 == 1:
        print(n, "korova")
    else:
        print(n, "korovy")


    Задача 5: Количество положительных элементов списка

    Напишите программу, которая подсчитывает количество положительных элементов в данном списке.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход несколько чисел (не более 100000), записанных в одной строке через пробел. Все числа по модулю не превосходят 109.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести единственное число - количество положительных чисел среди данных.

    ПРИМЕР

    ВВОД

    ВЫВОД

    3 0 -1 2 -2

    2

    Конец формы

    РЕШЕНИЕ

    Присвоим переменной ans значение 0.

    Пройдем циклом по всем элементам списка. Если элемент больше нуля, то нужно увеличить переменную ans на 1.

    A = list(map(int, input().split()))
    ans = 0
    for elem in A:
        if elem > 0:
            ans += 1
    print(ans)


    Задача 6: Наименьший положительный элемент списка

    Напишите программу, которая находит в данном списке наименьший положительный элемент.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход несколько чисел (не более 100000), записанных в одной строке через пробел. Все числа по модулю не превосходят 109. Среди чисел есть хотя бы одно положительное.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести единственное число - наименьшее положительное число среди данных.

    ПРИМЕР

    ВВОД

    ВЫВОД

    5 0 -1 3 -2

    3


    РЕШЕНИЕ

    Запишем в ans значение, которое не меньше всех элементов списка, например, 109. Пройдем циклом по всем элементам списка. Если элемент больше нуля и меньше ans, то запишем в переменную ans значение элемента списка.

    A = list(map(int, input().split()))
    ans = 10 ** 9
    for elem in A:
        if 0 < elem < ans:
            ans = elem
    print(ans)


    Задача 7: Сумма чисел в файле (одно число в строке)

    Ограничение по времени работы программы: 1 секунда

    В каждой строке текстового файла записано одно целое число. Посчитайте сумму чисел в файле и выведите результат в другой файл.

    ВХОДНЫЕ ДАННЫЕ

    Входные данные к этой задаче записаны в файле input.txt. Файл содержит не более 100000 строк, в каждой строке записано одно целое число, не превосходящее по модулю 109.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести в файл output.txt сумму всех чисел во входном файле.

    ПРИМЕР

    input.txt

    output.txt

    1
    2
    3

    6

    РЕШЕНИЕ

    Откроем файл на чтение. Считаем все строки файла при помощи метода readlines() в список. Пройдем циклом по всем элементам списка, преобразовывая элементы списка к типу int и подсчитывая их сумму. Выведем результат в файл output.txt.

    inf = open("input.txt", "r")
    A = inf.readlines()
    inf.close()
    s = 0
    for elem in A:
        s += int(elem)
    ouf = open("output.txt", "w")
    ouf.write(str(s) + "\n")
    ouf.close()


    Задача 8: Сумма чисел в файле (несколько чисел в строке)

    Ограничение по времени работы программы: 1 секунда

    В каждой строке текстового файла записано одно или несколько целых чисел, разделенных пробелами. Посчитайте сумму чисел в файле и выведите результат в другой файл.[ CITATION Кир \l 1049 ]

    ВХОДНЫЕ ДАННЫЕ

    Входные данные к этой задаче записаны в файле input.txt. В каждой строке файла записано одно или несколько целых чисел, не превосходящее по модулю 109, через пробел. Общее количество чисел не превосходит 100000.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести в файл output.txt сумму всех чисел во входном файле.

    ПРИМЕР

    input.txt

    output.txt

    1 2
    3

    6

    РЕШЕНИЕ

    В этой задаче удобней считать файл целиком при помощи метода read() и разбить на отдельные числа при помощи метода split(). Затем преобразовать все элементы полученного списка в числа и подсчитать их сумму.

    inf = open("input.txt", "r")
    A = inf.read().split()
    inf.close()
    s = 0
    for elem in A:
        s += int(elem)
    ouf = open("output.txt", "w")
    ouf.write(str(s) + "\n")
    ouf.close()


    Задача 9: Неправильные числа Фибоначчи

    Ограничение по времени работы программы: 1 секунда

    Зададим «неправильные» числа Фибоначчи, в которых n-е число равно сумме n−1-го и n−3-го. Более формально,

    F0=F1=F2=1,

    Fn=Fn−1+Fn−3, при n>2.

    Вычислите n-е «неправильное» число Фибоначчи. Попробуйте реализовать рекурсивную функцию, даже если вы знаете другие (более эффективные) способы вычисления.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход одно целое число n, 0≤n≤35.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести одно искомое число.

    ПРИМЕР

    ввод

    вывод

    7

    9

    РЕШЕНИЕ

    Необходимо аккуратно запрограммировать рекуррентные соотношения.

    def fib(n):
        if n <= 2:
            return 1
        else:
            return fib(n - 1) + fib(n - 3)

    print(fib(int(input())))


    Задача 10: Функция Аккермана

    Ограничение по времени работы программы: 1 секунда

    В теории вычислимости важную роль играет функция Аккермана A(m,n) от двух параметров (неотрицательных целых чисел), определенная следующим образом:

    A(m,n)=n+1, при m=0,

    A(m,n)=A(m−1,1), при m>0, n=0,

    A(m,n)=A(m−1,A(m,n−1)), при m>0, n>0.

    По данным m и n вычислите A(m,n).

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход два целых неотрицательных числа m и n, записанных в отдельных строчках.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести значение A(m,n). Известно, что результат не превосходит 100000.

    ПРИМЕР

    ввод

    вывод

    3
    2

    29

    РЕШЕНИЕ

    Необходимо аккуратно запрограммировать условия задачи.

    При решении на языке Python придется увеличить максимальную глубину рекурсии при помощи sys.setrecursionlimit.

    import sys
    sys.setrecursionlimit(5000)
    def A(m, n):
        if m == 0:
            return n + 1
        if m > 0 and n == 0:
            return A(m - 1, 1)
        if m > 0 and n > 0:
            return A(m - 1, A(m, n - 1))

    m = int(input())
    n = int(input())
    print(A(m, n))


    Задача 11: k-е простое число

    Ограничение по времени работы программы: 1 секунда

    По данному числу k найдите k-е по счету простое число.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход одно целое число k, 1≤k≤1000.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести k-е простое число.

    ПРИМЕР

    ввод

    вывод

    1

    2

    5

    11

    РЕШЕНИЕ

    Значение k невелико, поэтому задачу можно решить перебором.

    Будем перебирать все натуральные числа, начиная с 2, проверять каждое число на простоту и подсчитывать количество найденных простых чисел. Когда будет найдено k простых чисел, выведем последнее найденное простое число.

    def IsPrime(n):

        d = 2

        while d * d <= n and n % d != 0:

            d += 1

        return d * d > n

     

    k = int(input())

    n = 2

    while k > 0:

        if IsPrime(n):

            k -= 1

        n += 1

    print(n - 1) 

    Задача 12: Гипотеза Гольдбаха

    Ограничение по времени работы программы: 1 секунда

    Гипотеза Гольдбаха утверждает, что любое чётное число (кроме 2) можно представить в виде суммы двух простых чисел. Эта гипотеза не доказана и не опровергнута до сих пор.

    Для данного чётного числа n выведите его представление в виде суммы двух простых.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход одно целое чётное число n, 2≤n≤106.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести два простых числа, дающих в сумме n.

    ПРИМЕР

    ввод

    вывод

    4

    2 2

    10

    3 7

    РЕШЕНИЕ

    Данную задачу можно решить перебором возможных представлений числа n в виде суммы двух чисел.

    Будем перебирать все возможные представления числа n в виде двух слагаемых. Если одно слагаемое равно d, то другое слагаемое будет n−d. Перебор будем продолжать, пока оба слагаемых не станут простыми.

    Можно отдельно разобрать случай n=4, в этом случае выведем числа 2 2, а при n>4 будем перебирать только нечётные значения d.

    def IsPrime(n):

        d = 2

        while d * d <= n and n % d != 0:

            d += 1

        return d * d > n

     

    n = int(input())

    if n == 4:

        print(2, 2)

    else:

        d = 3

        while not IsPrime(d) or not IsPrime(n - d):

            d += 1

        print(d, n - d)

    Задача 13: Количество простых чисел на отрезке

    Ограничение по времени работы программы: 1 секунда

    Определите количество простых чисел на отрезке [a,b].

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход два целых числа a и b, 1≤a≤b≤106.

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести количество простых чисел p на отрезке
     [a,b] (то есть количество таких простых p, что  a≤p≤b).

    ПРИМЕР

    ввод

    вывод

    5
    10

    2

    РЕШЕНИЕ

    Будем использовать решето Эратосфена.  Создадим массив IsPrime, заполнив значениями True/False (или 1/0), отмечая простые числа. После этого посчитаем количество целых чисел среди элементов с индексами от a до b (включительно).

    N = 1000000
    IsPrime = [True] * (N + 1)

    IsPrime[0] = False
    IsPrime[1] = False
    p = 2
    while p * p <= N:
        if IsPrime[p]:
            for i in range(p * p, N + 1, p):
                IsPrime[i] = False
        p += 1

    a = int(input())
    b = int(input())
    print(sum(IsPrime[a:b + 1]))


    Задача 14: Дружественные числа

    Ограничение по времени работы программы: 2 секунды

    Два различных числа n и m называются дружественными, если сумма делителей числа n (включая 1, но исключая само n) равна числу m и наоборот. Например, 220 и 284 — дружественные числа.

    По данному числу n найдите все пары дружественных чисел, не превосходящих числа n.

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход одно целое число n, 1≤n≤20000.

    ВЫХОДНЫЕ ДАННЫЕ

    Выведите все пары дружественных чисел, каждое из которых не превосходит n. Пары необходимо выводить по одной в строке, разделяя числа в паре пробелом. Каждая пара должна быть выведена только один раз (перестановка чисел новую пару не дает).

    ПРИМЕР

    ввод

    вывод

    300

    220 284

    РЕШЕНИЕ

    Будем перебирать все числа a, не превосходящие n. Посчитаем сумму делителей числа a и запишем её в переменную b. Если b≤n, то посчитаем сумму делителей числа b, если она равна a, то выведем пару a, b.

    Для того, чтобы каждая пара выводилась ровно один раз, нужно поставить условие a
    Также необходимо реализовать алгоритм определения суммы делителей числа a так, чтобы он работал за a√, для чего делители нужно перебирать до значения a√.

    def divisors(n):
        ans = 1
        d = 2
        while d * d < n:
            if n % d == 0:
                ans += d
                ans += n // d
            d += 1
        if d * d == n:
            ans += d
        return ans

    n = int(input())
    for a in range(2, n + 1):
        b = divisors(a)
        if a < b <= n and divisors(b) == a:
            print(a, b)


    Задача 15: Сортировка пузырьком: количество обменов

    Ограничение по времени работы программы: 1 секунда

    Дан список целых чисел. Какое количество обменов совершит пузырьковая сортировка (по не убыванию элементов), запущенная на этом списке?

    ВХОДНЫЕ ДАННЫЕ

    Программа получает на вход n целых чисел, записанных через пробел в одной строке, 1≤n≤100. Сами числа по модулю не превосходят 109

    ВЫХОДНЫЕ ДАННЫЕ

    Программа должна вывести одно число — искомое количество обменов.

    ПРИМЕР

    ввод

    вывод

    6 2 4 1

    5

    РЕШЕНИЕ

    Модифицируем алгоритм пузырьковой сортировки так, чтобы он подсчитывал количество выполненных обменов. Заведем внутри алгоритма переменную count, которую будем увеличивать на 1 при выполнении обмена. В конце вернем значение count.

    def BubbleSort(A):
        count = 0
        for j in range(len(A) - 1, 0, -1):
            for i in range(0, j):
                if A[i] > A[i + 1]:
                    A[i], A[i + 1] = A[i + 1], A[i]
                    count += 1
        return count

    A = list(map(int, input().split()))
    print(BubbleSort(A))

    1   2   3   4   5   6   7   8


    написать администратору сайта