вторник, 16 июля 2013 г.

Логические задачи. Два кувшина

Есть два пустых кувшина: на 3 и 5 литров. Необходимо в этих кувшинах принести ровно 7 литров. Никаких других способов измерения объема, кроме самих кувшинов использовать нельзя.

Ответ

1) Наполняем 3-литровый кувшин и переливаем в 5-литровый. Остаются незаполненными 2 литра
2) Снова наполняем 3-литровый кувшин и льем в 5-литровый, пока тот не станет полным. Теперь у нас в 3-литровом 1 литр.
3) Освобождаем 5-литровый и переливаем туда 1 литр из 3-хлитрового.
4) Наполняем 3-хлитровый и переливаем в 5-литровый. Теперь там 4 литра.
5) Наполняем 3-хлитровый. Итого у нас 7 литров.

Логические задачи. Русская рулетка

Я заряжаю барабан револьвера на 6 патронов. Ты успел подсмотреть, что патроны вставлены подряд. Я вращаю барабан, делаю выстрел - промах. Теперь твоя очередь. Ты бы хотел, что бы я вращал барабан или ты будешь делать следующий выстрел без вращения?

Ответ

Я бы не стал вращать.
Вероятность выстрела после вращения равна 2 из 6, т.е. 1/3
Если рассматривать вариант без вращения, то мы знаем, что на данный момент барабан находится в безопасной позиции. Так как патроны вставлены подряд, то после следующего нажатия курка может выпасть либо патрон, либо одна из 3-х пустых позиций. Таким образом один из 4-х вариантов должен выстрелить.
Итого, имеем вероятность выстрела: 1/3, если вращать и 1/4, если не вращать.

Логические задачи. Взвешиваем шары

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

Ответ

Можно определить за 2 взвешивания
1. Кладем на каждую чашу по 3 шара. Если чаши уравновешены, значит взвешиваем оставшиеся два
2. Если одна чаша перевешивает, берем из нее два шара, а третий убираем в сторону. Если чаши уравновешены, значит тяжелее третий, иначе, один из двух.

Логические задачи. Теннисный турнир

В теннисном турнире сто двадцать семь участников. В первом туре сто двадцать шесть игроков составят шестьдесят три пары, победители которых выйдут в следующий тур, и еще один игрок выходит во второй тур без игры. В следующем туре — шестьдесят четыре игрока сыграют тридцать два матча. Сколько всего матчей понадобится, чтобы определить победителя?

Задача взята из книги "Как сдвинуть гору Фудзи?" Уильяма Паундстоуна

Ответ

Чтобы появился победитель, он должен сыграть с каждым участником минимум одну игру. Т.е. требуется сыграть 127-1=126 матчей

четверг, 4 июля 2013 г.

Получаем список ключей в Map

Если в Map получить список ключей, а затем удалить ключ из этого списка, то данная запись пропадет из Map. Добавлять новые записи в этот список нельзя. Выдаст UnsupportedOperationException.

public class MapTest {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("One", new Object());
        map.put("Two", new Object());
        map.put("Three", new Object());
        
        Set<String> mapKeys = map.keySet();
        mapKeys.remove("One");
        
        for (Entry entry : map.entrySet()) {
            System.out.printf("%s - %s%n", entry.getKey(), entry.getValue());
        }
        mapKeys.add("One");
    }
}
Программа выведет:
Three - java.lang.Object@19e421e
Two - java.lang.Object@106d4ea
Exception in thread "main" java.lang.UnsupportedOperationException