Case19. В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года определить его название, если 1984 год — начало цикла: «год зеленой крысы».
Небольшая кликабельная картинка, поясняющая, что хотел сказать автор задачи:
Решение:
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 |
program Case19; var N:Integer; begin Write('Введите год: '); Readln(N); Write('год '); case (N mod 10) of 0,1: write('бел'); 2,3: write('черн'); 4,5: Write('зелён'); 6,7: Write('красн'); 8,9: Write('жёлт'); end; case (N mod 12) of 0..5,9..11: Write('ой '); 6..8:Write('ого '); end; case ((N+8) mod 12) of 0:Write('крысы'); 1:Write('коровы'); 2:Write('тигра'); 3:Write('зайца'); 4:Write('дракона'); 5:Write('змеи'); 6:Write('лошади'); 7:Write('овцы'); 8:Write('обезьяны'); 9:Write('курицы'); 10:Write('собаки'); 11:Write('свиньи'); end; end. |
Решение от olegst1975:
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 |
program Case19; var n,n1,n2:integer; begin Write('Введите год: '); Readln(n); if n<1984 then n1:=11+(n-1983)mod 12 else n1:=(n-1984)mod 12;//номер животного if n<1984 then n2:=4+((n-1983)mod 10)div 2 else n2:=((n-1984)mod 10)div 2;// номер цвета write(n,' - год '); case n2 of //тут 2,3,4 - это тигр, заяц, дракон 0:if n1 in[2,3,4] then write('зеленого ')else write('зеленой '); 1:if n1 in[2,3,4] then write('красного ')else write('красной '); 2:if n1 in[2,3,4] then write('желтого ')else write('желтой '); 3:if n1 in[2,3,4] then write('белого ')else write('белой '); 4:if n1 in[2,3,4] then write('черного ')else write('черной '); end; case n1 of 0:writeln('крысы'); 1:writeln('коровы'); 2:writeln('тигра'); 3:writeln('зайца'); 4:writeln('дракона'); 5:writeln('змеи'); 6:writeln('лошади'); 7:writeln('овцы'); 8:writeln('обезьяны'); 9:writeln('курицы'); 10:writeln('собаки'); 11:writeln('свиньи'); end; end. |
Другие задачи из раздела Case можно посмотреть здесь.
что-то не ладится с соввпадением цвета в задачнике
Да они меня здесь совсем запутали с зелёными крысами 🙂
Было
Стало:
Всё равно не на всех хочет. 1850, 1833, 2040, 1819, например, не получается
А что должно показывать в те года ?
Действительно не ладится. Ведь при
[/crayon]
цвета меняются каждые пять лет, а нужно двенадцать.
Вот код покороче
Можно изменить запись на:
И если уж так не прочь много писать … то можно избавиться ещё от
заменив
на
Конечно Александр этого не прочитает, но код не будет работать с 0,1,2 и 3 годами. При остальных — все отлично.
Не мог пройти мимо. В решении отталкивался от разницы исследуемого года и 1984. Работает и с отрицательными числами.
[/crayon]
Если хотим узнать хоть какой нибудь год кроме нулевого — в пятой строке нужно вставить: read(n). Забыл))
Спасибо.
Поправил.
Еще выше.. до if.5-я строка будет самое оно.
Забыл применить изменения 🙁
обнаружил, что в моём решении не правильно определялся цвет.
Поправил:
Было:
Стало:
Не помогло. Вот результаты
1984 — год зелёной крысы
1985 — год зелёной коровы
1986 — год красного тигра
1987 — год красного зайца
1988 — год жёлтого дракона
1989 — год жёлтой змеи
1990 — год белой лошади
1991 — год белой овцы
1992 — год черной обезьяны
1993 — год черной курицы
1994 — год зелёной собаки
1995 — год зелёной свиньи
именно … 🙂
Вот даже картинку нашёл:
Нет, ну так нельзя формулировать задачи) Антон, поздравляю, все остальные в комментах решали и решили(!), что цвет «длится» 12 лет. Поправил с учетом вновь открывшихся обстоятельств(строки с 5 по 13):
[/crayon]
да сам в шоке… час убил чтоб поставить точку в этом вопросе 🙂 притом большая часть была поиск гороскопов, и как всё таки они правильно считаются 🙂
Поправил ваше решение.
Было:
Стало:
Я решил задачу так)
Ооооочень много писал)
Дело в том, что смещая года зодиака в отрицательную сторону на 3 порядка мы получаем верный результат.
Не совсем понимаю почему так получается
В этом алгоритме ответы совпадают с ответом в Pascal учебнике.
а можно по подробнее про ответы в учебнике? потому как данный алгоритм, точно не совместим с реальностью, то есть как на самом деле идут цвета в году. 🙂
Вот ответ в учебнике
а на самом деле 2001 год это год белой змеи)))))
да … не даром к этой задаче столько комментариев 🙂 не все могут её решить правильно 🙂 даже авторы некоторых задачников…
И это не столько сложность задачи, сколько не полнота её описания..
Прочёл на вики, что начала 60 летнего цикла переносили несколько раз.
По-этому ответ в задачнике не совпадает.
в задании из задачника чётко указан 1984 год как начало цикла… так что это не оправдание 🙂
Однако, ответ в задачнике не правильный)
А значит, что цикл опять перенесли)
У меня ответы с задачнком совпадают, а вот с реалиями нет XD
Значит, там ответы кардинально отличаются от календаря.
Цвета в календаре идут по два одинаковых. То есть :
зелёный, зелёный, красный, красный, жёлтый, жёлтый, белый, белый, синий, синий.
А у вас в решении 12 зелёных подряд, потом 12 красных подряд, и т.д.
То есть в корне отличается с реальностью…
Но не совпадают с календарём)))
А приведите пример ответов? и ещё бы с названием учебника…
Это скорее задачник)
Да, спасибо увидел комментарий выше.
А вот версия, которая показывает года в соответствии с этим календарём
Ну да… много буковок 🙂
но зачем тогда эти страшные вычисления?
почему не так:
Потому что я только 8 дней учу pascal и покачто я тупой XD.
Не надо самобичеваний, всё будет хорошо 🙂