Маляры, носки и переменные — подборка задач для программистов

Обложка поста

Носки в ящике

В ящике лежат 7 чёрных носков, 7 белых носков, 8 зеленых носков и 8 красных носков. Вы собираетесь выйти, надев свои туфли. Какое максимальное количество раз вам нужно вынуть носок из ящика, чтобы вы могли идти?

Вы можете вынимать только 1 носок из ящика за раз. Учтите, что вы не можете пойти на улицу в разных носках.

There are 7 black socks, 7 white socks, 8 green socks and 8 red socks in a drawer. Now you have to go out wearing your shoes.  So how many maximum number of times you need to remove the sock from drawer so that you can go out?

You can remove only 1 sock at a time. Obviously, you can’t go outside wearing different socks!

Вы должны вынуть носки максимум N+1 раз, где N — это количество цветов. Первые 4 раза вы можете достать носки разных цветов, но пятый будет явно очевидно совпадать по цвету с одним из предыдущих носков.

You have to remove socks N of colors + 1 maximum number of times. First 4 times you can remove differently coloured socks, but fifth will obviously matched with one of the previous socks.

Поменяйте переменные местами

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

Given two number variables, x and y, write a program to swap two variables without using a third variable.

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

One of the simplest approaches is to use arithmetic operators. The idea is to get sum in one of the two given numbers. The numbers can then be swapped using the sum and subtraction from sum.

<?php
// Реализация на PHP
// смены чисел без дополнительных
// переменных
$x = 10; $y = 5;

// Код для замены 'x' и 'y'
$x = $x + $y; // x now becomes 15
$y = $x - $y; // y becomes 10
$x = $x - $y; // x becomes 5

echo "After Swapping: x = ",
       $x, "," , "y = ", $y;
?>

Маляры и перчатки

Двое маляров встречают на дороге еще двоих маляров. У всех них перепачканы руки разными красками. Как, используя всего две перчатки, двум малярам обменяться рукопожатиями с другими двумя малярами, чтобы их руки не испачкались чужими красками? Перчатки можно передавать и выворачивать.

Two painters meet on the road two other painters. All of them have their hands smeared with different colors. How to use only two gloves for two painters to shake hands with the other two painters so that their hands do not get dirty with other people’s colors? Gloves can be transferred and turned out.

Маляры: a, b, c, d.
Перчатки: (1)0-0 (2)0-0

1-е рукопожатие a-c. A и C надевают перчатки и здороваются, в итоге их перчатки запачканы с одной стороны соответствующими их цветами, а с другой стороны чистые: a-0 0-c

2-е рукопожатие a-d. A не снимает перчатку и здоровается с D, которые не надевает перчатку. Перчатка пачкается в цвет D после этого. Перчатки: a-d 0-c.

3-е рукопожатие c-b. Маляр B также не надевает перчатку. Перчатки: a-d b-c

4-е рукопожатие d-b. B берет вторую перчатку и выворачивает её. Маляр D проделывает то же самое с первой перчаткой. Они обмениваются рукопожатием. Перчатки: a(c)-d b-c(a)

Painters: a, b, c, d.
Gloves: (1)0-0 (2)0-0

1st handshake a-c. Painter A puts on 1st glove, painter C puts on 2nd glove, as a result, their gloves are stained with their colors on one side and clean on the other: a-0 0-c

2nd handshake: a-d. Painter D does not put on any glove. The glove gets dirty in color D after that. Gloves: a-d 0-c

3d handshake: c-b. Painter B does not put on any glove. Gloves: a-d b-c

Last handshake: d-b. Painter B takes 2nd glove and turns it out, painter D does the same with 1st glove. Gloves: a(c)-d b-c(a)

Как Яндекс использует ваши данные и машинное обучение для персонализации сервисов — читать и смотреть YaC 2019.