Соревнование по программированию

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

Re: Соревнование по программированию

Post by MARK99 »

Да, я за.
Я очень люблю решать физические и геометрические задачи по программированию,
Берёшь открываешь сборник задач и пишешь по ней код, но только для произвольного "дано",
Одна из моих любимых это на кинематику:
Человек бежит со скоростью X(вводится с клавиатуры) от стены высотой H(вводится с клавиатуры), со стены под углом A(вводится с клавиатуры) к горизонту бросают камень в сторону человека со скоростью V(вводится с клавиатуры), 1) проверить попадёт ли камень в человека(вывести на экран yes или no), 2) если да, то на каком расстоянии от стены(вывести на экран число)?
Image

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

Re: Соревнование по программированию

Post by Dahl »

Пожалуйста, вот моя любимая.

Стороны прямоугольника параллельны координатным осям. Даны (вводятся с клавиатуры) координаты трёх произвольных вершин из четырёх. Вершины при этом могут идти в произвольном порядке. Пусть для простоты все координаты целочисленны. Найти (вывести на печать) координаты четвёртой отсутствующей вершины.

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

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

Re: Соревнование по программированию

Post by MARK99 »

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&")" 
Image

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

Re: Соревнование по программированию

Post by Dahl »

Чего только не придумает народ. (: Сколько даю эту задачу — каждый раз вижу чего-нибудь новое…

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

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

Re: Соревнование по программированию

Post by MARK99 »

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
А побитое xor (x, y) чисел- это число=x+y or x+y-2, при условии, что x+y делится на два без остатка?
Image

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

Re: Соревнование по программированию

Post by Dahl »

Это несколько более сложная штука. :)

В контексте данной задачи существенно, что ноль с любым число даст это число, а любое число само с собой даст ноль. В корректно заданных входных данных два числа из трёх по каждой координате повторяются, а то, что не повторяется, и есть ответ.

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

Re: Соревнование по программированию

Post by MARK99 »

Dahl wrote:Это несколько более сложная штука. :)

В контексте данной задачи существенно, что ноль с любым число даст это число, а любое число само с собой даст ноль. В корректно заданных входных данных два числа из трёх по каждой координате повторяются, а то, что не повторяется, и есть ответ.
Понятно, а как идёт выбор между двумя числами, например:

Code: Select all

Print xor (1, 5)
Print xor (1, 4)
Image

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

Re: Соревнование по программированию

Post by Dahl »

Например, рассматриваем 1 и 5. Их двоичные представления 001 и 101 соответственно. Берём последовательно одинаковые разряды, получаем три пары: (0,1) (0,0) (1,1).

По описанным выше правилам для этих трёх пар получаем три результата: 1,0,0. Собираем из них двоичное представление ответа 100. Это десятичное 4.

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

Re: Соревнование по программированию

Post by MARK99 »

Dahl wrote:Например, рассматриваем 1 и 5. Их двоичные представления 001 и 101 соответственно. Берём последовательно одинаковые разряды, получаем три пары: (0,1) (0,0) (1,1).

По описанным выше правилам для этих трёх пар получаем три результата: 1,0,0. Собираем из них двоичное представление ответа 100. Это десятичное 4.
Понял, спасибо :)
Image

Post Reply