Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/530: Рейтинг темы: голосов - 530, средняя оценка - 4.63
12 / 10 / 3
Регистрация: 09.10.2018
Сообщений: 49

Остров невезения

18.10.2018, 20:37. Показов 108398. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Где-то по среди океана есть тихий и прекрасный остров Яшорты. Казалось бы, что может быть прекраснее южного солнца, белоснежных пляжей, экзотических цветов и птиц всех цветов радуги? Но вот дела у местных жителей идут не очень: крокодил не ловится, кокос не растет. Один из старейшин предположил: «Наверное, нас мама родила в понедельник!». Но проверить эту гипотезу оказалось непросто, потому что календаря на острове никто никогда не видал. Долго длились поиски решения, и вот местному шаману предки подсказли заветную формулу (которая на самом деле работает!):

d + ((13*m - 1) / / 5 ) + y + (y / /4 + c / / 4 - 2*c + 777),

где d — число месяца, m — номер месяца, если начинать счет с марта, как это делали в Древнем Риме (март — 1, апрель — 2, ..., февраль — 12), y — номер года в столетии, c — количество столетий.

Если потом вычислить остаток от деления на 7, то мы получим день недели: 1 — понедельник, 2 — вторник, ..., 6 — суббота, 0 — воскресенье.

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

Формат ввода
Три строки: день, месяц и год рождения аборигена.

Формат вывода
Число - день недели, в который родился абориген (1 — понедельник, 2 — вторник, ..., 6 — суббота, 0 — воскресенье).

Пример 1
Ввод
1
9
2000

Вывод
5

Есть код:
Python
1
2
3
4
5
6
7
8
9
d = int(input())
m = int(input())
e = int(input())
 
c = e / 100
y = e - c * 100
w = d + ((13 * m - 1) // 5 ) + y + (y // 4 + c // 4 - 2 * c + 777)
r = w % 7
print(r)
но у меня проблемы с кол-вом столетий и номером столетия - переменная e.
e это c и y , и где-то там у меня ошибка

Помогите пожалуйста

Добавлено через 3 часа 43 минуты
Помогите пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2018, 20:37
Ответы с готовыми решениями:

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

Остров невезения
Остров невезения Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод ...

Остров невезения
Задача "Остров невезения" Где-то посреди океана есть тихий и прекрасный остров Яшорты. Казалось бы, что может быть прекраснее южного...

14
24 / 19 / 6
Регистрация: 10.11.2016
Сообщений: 51
19.10.2018, 01:33
Python
1
2
3
4
5
6
7
8
9
10
d = int(input('Введите день: '))
m = int(input('Введите месяц: '))
e = int(input('Введите год: ')) - 1
 
c  = e / 100
y = ((e - 1) % 100) + 1
 
r = d + ((13*m - 1) // 5 ) + y + (y //4 + c // 4 - 2*c + 777)
r %= 7
print( str(int(r)) )
Добавлено через 25 минут
немного промахнулся:

Python
1
2
3
4
5
6
7
8
9
10
11
d = int(input('Введите день: '))
m = int(input('Введите месяц: '))
e = int(input('Введите год: ')) - 1
 
c  = int(e / 100 + 1)
print(c)
y = ((e - 1) % 100) + 1
 
r = d + ((13*m - 1) // 5 ) + y + (y //4 + c // 4 - 2*c + 777)
r %= 7
print( str(int(r)) )
0
12 / 10 / 3
Регистрация: 09.10.2018
Сообщений: 49
19.10.2018, 09:12  [ТС]
Все, сделал
Python
1
2
3
4
5
6
7
8
9
10
d = int(input())
m = int(input())
e = int(input()) 
 
c  = int(e / 100)
y = ((e-c) % 100) 
 
r = d + ((13*m - 1) // 5 ) + y + (y //4 + c // 4 - 2*c + 777)
r %= 7
print(r)
0
24 / 19 / 6
Регистрация: 10.11.2016
Сообщений: 51
19.10.2018, 19:39
вообще-то у нас 21 век, а теперь посмотри, что у тебя возвращает строка 5, если указать 2018 в e))
и ты по "как это делали в Древнем Риме" считаешь?

Добавлено через 1 минуту
потому, как в строке 6 номер года в столетии тоже странный
0
12 / 10 / 3
Регистрация: 09.10.2018
Сообщений: 49
19.10.2018, 22:37  [ТС]
Цитата Сообщение от megacold Посмотреть сообщение
вообще-то у нас 21 век, а теперь посмотри, что у тебя возвращает строка 5, если указать 2018 в e))
и ты по "как это делали в Древнем Риме" считаешь?

Добавлено через 1 минуту
потому, как в строке 6 номер года в столетии тоже странный
Не подскажешь как это сделать?

Добавлено через 2 часа 14 минут
Пример

Ввод
12
9
2012

ожидаемый результат
3
вывод
4
0
24 / 19 / 6
Регистрация: 10.11.2016
Сообщений: 51
20.10.2018, 02:42
я тебе писал правильный вариант: https://www.cyberforum.ru/post12982196.html
тот, что после "немного промахнулся:"

мой вариант тоже показывает 4((
странно
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
20.10.2018, 08:46
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Всё нормально выводит:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def day_of_week(day:int,month:int,year:int):
    """
        Где-то по среди океана есть тихий и прекрасный остров Яшорты. Казалось бы,
        что может быть прекраснее южного солнца, белоснежных пляжей, экзотических
        цветов и птиц всех цветов радуги? Но вот дела у местных жителей идут не очень:
        крокодил не ловится, кокос не растет. Один из старейшин предположил: «Наверное,
        нас мама родила в понедельник!». Но проверить эту гипотезу оказалось непросто,
        потому что календаря на острове никто никогда не видал. Долго длились поиски
        решения, и вот местному шаману предки подсказли заветную формулу (которая на
        самом деле работает!):
        d + ((13*m - 1)//5 ) + y + (y //4 + c//4 - 2*c + 777),
        где d — число месяца, m — номер месяца, если начинать счет с марта, как это
        делали в Древнем Риме (март — 1, апрель — 2, ..., февраль — 12), y — номер года
        в столетии, c — количество столетий.
        Если потом вычислить остаток от деления на 7, то мы получим день недели:
        1 — понедельник, 2 — вторник, ..., 6 — суббота, 0 — воскресенье.
        Помогите местным жителям написать программу, чтобы каждый из жителей мог прийти,
        ввести день, месяц и год своего рождения и узнать день недели чтобы проверить,
        действительно ли он невезучий.
        Формат ввода
        Три строки: день, месяц и год рождения аборигена.
        Формат вывода
        Число - день недели, в который родился абориген (1 — понедельник, 2 — вторник, ...,
        6 — суббота, 0 — воскресенье).
    """
    d = day
    c = year//100
    m = month-2 if month>2 else 10+month
    y = year%100
    return (d+((13*m-1)//5)+y+(y//4+c//4-2*c+777))%7
 
day = int(input('Введите день: '))
month = int(input('Введите месяц: '))
year = int(input('Введите год: '))
print(day_of_week.__doc__)
print(day_of_week(day,month,year))
1
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
03.11.2018, 17:11
Цитата Сообщение от TAVulator Посмотреть сообщение
Всё нормально выводит:
Не совсем правильно работает твой способ.
Если, к примеру, ввести 1 января 2018г, то должно выводить 1(понедельник), а в твоём примере 2(вторник)
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
03.11.2018, 17:25
Цитата Сообщение от Vector8558 Посмотреть сообщение
Не совсем правильно работает твой способ.
Если, к примеру, ввести 1 января 2018г, то должно выводить 1(понедельник), а в твоём примере 2(вторник)
видимо в формуле ошибка. в 2018 году до конца февраля такой сдвиг
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
03.11.2018, 18:12
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Методом проб и ошибок, а также намёку TAVulator я немного подправил код (заменив при этом формулу на корректную) и теперь он работает в любом случае вроде бы правильно.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
d = int(input())
m = int(input())
y = int(input())
 
y = y if (m - 2) > 0 else y - 1
m = m - 2 if (m - 2) > 0 else 12 - abs(m - 2)
 
c = y // 100
 
y = y % 100
 
n = int(d + ((13 * m - 1) / 5) + y + (y / 4) + (c / 4) - 2 * c)
 
print(n % 7)
Добавлено через 20 минут
В итоге мой пример оказался тоже не совсем правильный.
Похоже, что этот будет верным во всех датах:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
d = int(input())
m = int(input())
y = int(input())
 
y = y if (m - 2) > 0 else y - 1
m = m - 2 if (m - 2) > 0 else 12 - abs(m - 2)
 
c = y // 100
 
y = y % 100
 
n = (d + ((13 * m - 1) // 5) + y + (y // 4 + c // 4 - 2 * c + 777)) % 7
 
print(n)
4
2 / 2 / 0
Регистрация: 20.11.2018
Сообщений: 4
20.11.2018, 19:30
d = int(input())
m = int(input())
m -= 2
k = int(input())
c = k // 100
y = k % 100
print((d + (((13 * m) - 1) // 5) + y + ((y // 4) + c // 4 - (2 * c) + 777)) % 7)
2
21.11.2018, 05:24

Не по теме:

Вы по ходу из одного класса :D Определить день недели по дате

0
29 / 26 / 5
Регистрация: 20.11.2018
Сообщений: 40
21.11.2018, 09:11
Python
1
2
3
4
5
6
7
8
9
10
d = int(input())
m = int(input()) - 2
y = int(input())
if m < 1:
    m = m + 12
    y = y - 1
c = y // 100
y = y % 100
nw = (d + ((13 * m - 1) // 5) + y + (y // 4 + c // 4 - 2 * c + 777)) % 7
print(nw)
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
21.11.2018, 14:24
Зачем up-аете? Уже есть решение.
0
0 / 0 / 0
Регистрация: 27.06.2021
Сообщений: 2
29.10.2021, 16:14
Python
1
2
3
4
5
6
7
8
9
10
11
d = int(input())
m = int(input())
y = int(input()) 
if (m - 2) > 0:
    m -= 2 
else:
    m = 12 - abs(m - 2)
    y -= 1
c = y // 100 
y = y % 100
print(d + ((13 * m - 1) // 5) + y + (y // 4 + c // 4 - 2 * c + 777)) % 7
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2021, 16:14
Помогаю со студенческими работами здесь

Остров
Доброе время суток, решаю олимпиадную задачу: На клетчатой бумаге нарисована карта острова (клетки острова закрашены). При этом остров...

Остров
На клетчатой бумаге нарисована карта острова (клетки острова закрашены). При этом остров является клетчато-выпуклой фигурой, то есть каждая...

Остров
На клетчатой бумаге нарисована карта острова (клетки острова закрашены). При этом остров является клетчато-выпуклой фигурой, то есть каждая...

Остров невезения
Где-то посреди океана есть тихий и прекрасный остров Яшорты. Казалось бы, что может быть прекраснее южного солнца, белоснежных пляжей,...

Смысл песни "Остров невезения"
Смысл этой песни мне представился образом следуюшим. И поскольку это текст авторский, я его содержимое не цитирую. Добавлено через 7...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru