Да, я за.
Я очень люблю решать физические и геометрические задачи по программированию,
Берёшь открываешь сборник задач и пишешь по ней код, но только для произвольного "дано",
Одна из моих любимых это на кинематику:
Человек бежит со скоростью X(вводится с клавиатуры) от стены высотой H(вводится с клавиатуры), со стены под углом A(вводится с клавиатуры) к горизонту бросают камень в сторону человека со скоростью V(вводится с клавиатуры), 1) проверить попадёт ли камень в человека(вывести на экран yes или no), 2) если да, то на каком расстоянии от стены(вывести на экран число)?
Соревнование по программированию
Re: Соревнование по программированию
Пожалуйста, вот моя любимая.
Стороны прямоугольника параллельны координатным осям. Даны (вводятся с клавиатуры) координаты трёх произвольных вершин из четырёх. Вершины при этом могут идти в произвольном порядке. Пусть для простоты все координаты целочисленны. Найти (вывести на печать) координаты четвёртой отсутствующей вершины.
Для начинающих — просто решить задачу. Для опытных — решить задачу, не пользуясь условными операторами. Для сомневающихся — такое решение существует и, более того, является максимально эффективным.
Стороны прямоугольника параллельны координатным осям. Даны (вводятся с клавиатуры) координаты трёх произвольных вершин из четырёх. Вершины при этом могут идти в произвольном порядке. Пусть для простоты все координаты целочисленны. Найти (вывести на печать) координаты четвёртой отсутствующей вершины.
Для начинающих — просто решить задачу. Для опытных — решить задачу, не пользуясь условными операторами. Для сомневающихся — такое решение существует и, более того, является максимально эффективным.
Re: Соревнование по программированию
Очень интересная задача, мне пришлость поразмышлять о бесконечном, как десятиклассник, скажу, что очень занятно...Dahl wrote:Пожалуйста, вот моя любимая.
Стороны прямоугольника параллельны координатным осям. Даны (вводятся с клавиатуры) координаты трёх произвольных вершин из четырёх. Вершины при этом могут идти в произвольном порядке. Пусть для простоты все координаты целочисленны. Найти (вывести на печать) координаты четвёртой отсутствующей вершины.
Для начинающих — просто решить задачу. Для опытных — решить задачу, не пользуясь условными операторами. Для сомневающихся — такое решение существует и, более того, является максимально эффективным.
Dahi, а можно вывести на экран все четыре координаты вершин, при решении?
Если да, то вот моё решение:
Code: Select all
INPUT "x1":x1
INPUT "y1":y1
INPUT "x2":x2
INPUT "y2":y2
INPUT "x3":x3
INPUT "y3":y3
'находи мин. значение x
x22=0
DO
x22+=1
UNTIL x1=x22 OR x2=x22 OR x3=x22
x11=x22
'находи мак. значение x
DO
x22+=1
UNTIL x1=x22 OR x2=x22 OR x3=x22
'находи мин. значение y
y22=0
DO
y22+=1
UNTIL y1=y22 OR y2=y22 OR y3=y22
y11=y22
'находи мак. значение y22
DO
y22+=1
UNTIL y1=y22 OR y2=y22 OR y3=y22
'выводим значения координат вершин
PRINT "A("&x11&";"&y11&")"
PRINT "B("&x11&";"&y22&")"
PRINT "C("&x22&";"&y22&")"
PRINT "D("&x22&";"&y11&")"
Re: Соревнование по программированию
Чего только не придумает народ. (: Сколько даю эту задачу — каждый раз вижу чего-нибудь новое…
Code: Select all
INPUT "x1":x1
INPUT "y1":y1
INPUT "x2":x2
INPUT "y2":y2
INPUT "x3":x3
INPUT "y3":y3
x4=XOR(x1,XOR(x2,x3))
y4=XOR(y1,XOR(y2,y3))
PRINT "x4=";x4,"y4=";y4
Re: Соревнование по программированию
А побитое xor (x, y) чисел- это число=x+y or x+y-2, при условии, что x+y делится на два без остатка?Dahl wrote:Чего только не придумает народ. (: Сколько даю эту задачу — каждый раз вижу чего-нибудь новое…
Code: Select all
INPUT "x1":x1 INPUT "y1":y1 INPUT "x2":x2 INPUT "y2":y2 INPUT "x3":x3 INPUT "y3":y3 x4=XOR(x1,XOR(x2,x3)) y4=XOR(y1,XOR(y2,y3)) PRINT "x4=";x4,"y4=";y4
Re: Соревнование по программированию
Это несколько более сложная штука.
В контексте данной задачи существенно, что ноль с любым число даст это число, а любое число само с собой даст ноль. В корректно заданных входных данных два числа из трёх по каждой координате повторяются, а то, что не повторяется, и есть ответ.
В контексте данной задачи существенно, что ноль с любым число даст это число, а любое число само с собой даст ноль. В корректно заданных входных данных два числа из трёх по каждой координате повторяются, а то, что не повторяется, и есть ответ.
Re: Соревнование по программированию
Понятно, а как идёт выбор между двумя числами, например:Dahl wrote:Это несколько более сложная штука.
В контексте данной задачи существенно, что ноль с любым число даст это число, а любое число само с собой даст ноль. В корректно заданных входных данных два числа из трёх по каждой координате повторяются, а то, что не повторяется, и есть ответ.
Code: Select all
Print xor (1, 5)
Print xor (1, 4)
Re: Соревнование по программированию
Например, рассматриваем 1 и 5. Их двоичные представления 001 и 101 соответственно. Берём последовательно одинаковые разряды, получаем три пары: (0,1) (0,0) (1,1).
По описанным выше правилам для этих трёх пар получаем три результата: 1,0,0. Собираем из них двоичное представление ответа 100. Это десятичное 4.
По описанным выше правилам для этих трёх пар получаем три результата: 1,0,0. Собираем из них двоичное представление ответа 100. Это десятичное 4.
Re: Соревнование по программированию
Понял, спасибоDahl wrote:Например, рассматриваем 1 и 5. Их двоичные представления 001 и 101 соответственно. Берём последовательно одинаковые разряды, получаем три пары: (0,1) (0,0) (1,1).
По описанным выше правилам для этих трёх пар получаем три результата: 1,0,0. Собираем из них двоичное представление ответа 100. Это десятичное 4.