Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 27.10.2020, 12:40   #121
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 64
По умолчанию

Спасибо)

Ешё одно задание:
1)Исходные данные
В единственной строке находится целое число N, 1 ≤ N ≤ 109.
Результат
Следует вывести два целых положительных числа A и P, таких, что
N = A + (A + 1) + … + (A + P − 1).
Среди всех пар чисел A и P, удовлетворяющих условию 1, у выводимой пары максимально значение P.
Мой вариант:
Код:
def operation():
    global n, done, p, a, sum
    b = a
    while sum < n:
        sum += b
        b += 1
    if sum == n:
        p = b + a - 2
        done = True
    else:
        a += 1
        sum = 0
    print(a, b, p, sum)


n = int(input())
done = False
sum = 0
p = None
a = -1
while not done:
    operation()
print(a, p)
Есть идеи?
FsGaCh вне форума Ответить с цитированием
Старый 27.10.2020, 17:30   #122
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,744
По умолчанию

Код:
n = int(input())
a = 1
sum = a
b = a
while True:
    while sum < n:
        b += 1
        sum += b
    if sum == n:
        p = b - a + 1
        print(a, p)
        break
    else:
        sum -= a
        a += 1
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.10.2020 в 17:46.
BDA вне форума Ответить с цитированием
Старый 28.10.2020, 18:22   #123
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 64
По умолчанию

1)Поп-группа «Розовый слон» приступила к записи своего дебютного альбома. Правда, у группы пока всего две песни: «Моя любовь» и «Я скучаю по тебе», но зато на каждую сделано огромное количество ремиксов.
Продюсер группы сказал, что в альбом должно войти ровно n треков, каждый из которых — это ремикс на одну из двух песен группы. Поразмыслив, музыканты решили, что диск будет интересно слушать только в том случае, если на нём не более a треков подряд будут ремиксами на песню «Моя любовь» и не более b треков подряд будут ремиксами на песню «Я скучаю по тебе». Иначе есть риск, что даже самые преданные фанаты не дослушают альбом до конца.
Сколько существует различных вариантов записи альбома из n композиций, который будет интересно слушать? Вариант записи — это последовательность чисел 1 и 2, где единицы обозначают ремиксы на песню «Моя любовь», а двойки — ремиксы на песню «Я скучаю по тебе». Два варианта считаются различными, если для некоторого i в одном варианте на i-м месте стоит единица, а в другом — двойка.

Мой вариант:
Код:
def decrypt(number):
    number.replace('1', '0')
    number.replace('2', '1')
    return number
def uncrypt(number):
    number.replace('1', '2')
    number.replace('0', '1')
    return number
def ToBin(number):
    return int(bin(number)[2:])
def BinToTen(number):
    returning = 0
    for i in range(len(number)):
        returning += int(number[i]) * 2 ** i
    return returning
def increase(number):
    global done, maxNum
    string = decrypt(number)
    tenthNumber = BinToTen(string) + 1
    returning = uncrypt(str(ToBin(tenthNumber)))
    if returning == maxNum:
        done = True
    print(done, returning)
    return returning
n, a, b = map(int, input().split())
amount = 0
done = False
startingNum = '2' * (n - 1)
maxNum = '2' * n
print(startingNum)
while done != True:
    startingNum = increase(startingNum)
    print(startingNum)
    if done == True:
        break
    if '1' * a not in startingNum and '2' * b not in startingNum:
        amount += 1
    print(amount, '+ 1')
print(amount)
Из-за какой-то ошибки (с большей вероятности, она находится в функциях), которую я не нашёл, цикл while не заканчивается. Если возможно, измените мой вариант так, что бы он работал, а не начинайте с нуля.
FsGaCh вне форума Ответить с цитированием
Старый 28.10.2020, 20:58   #124
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,744
По умолчанию

Честно говоря, мне лень отлаживать ваш код. Такое количество преобразований неоправданно. По идее, можно решить с помощью комбинаторики, но вот простейший перебор:
Код:
n, a, b = map(int, input().split())
sa = '0' * a
sb = '1' * b
amount = 0
for i in range(2 ** n):
    s = "{:0{}b}".format(i, n)
    if sa not in s and sb not in s:
        amount += 1
print(amount)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
готовлюсь к олимпиаде по информатике salauat Паскаль, Turbo Pascal, PascalABC.NET 25 01.12.2013 20:32
Подготовиться к олимпиаде за лето UaKot Свободное общение 20 10.05.2013 17:53
Подготовка к региональной олимпиаде New man Помощь студентам 20 14.12.2012 20:01
Задачи по олимпиаде Darick Помощь студентам 7 23.12.2011 14:45
Как подготовиться к олимпиаде? Kn793 Помощь студентам 16 26.07.2008 11:22


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя