Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java логическая задача

Анна Раевская(Баранова) Ученик (12), на голосовании 4 месяца назад
Добрый день! Помогите решить задачу на языке Java.Логическая задача Альберт и Бернард только что познакомились с Шерил. Они хотят знать, когда у неё день рождения. Шерил предложила им десять возможных дат: 15 мая, 16 мая, 19 мая, 17 июня, 18 июня, 14 июля, 16 июля, 14 августа, 15 августа и 17 августа. Затем Шерил сказала Альберту месяц своего рождения, а Бернарду -день. После этого состоялся диалог:Альберт: Я не знаю, когда у Шерил день рождения, но я знаю, что Бернард тоже не знает.Бернард: Поначалу я не знал, когда у Шерил день рождения, но знаю теперь.Альберт: Теперь я тоже знаю, когда у Шерил день рождения.Когда у Шерил день рождения?
Дополнен 5 месяцев назад
У меня вот так получается
Голосование за лучший ответ
HAKER HAKER Знаток (370) 5 месяцев назад
import java.util.HashSet;
import java.util.Set;

public class Birthday {

public static void main(String[] args) {
// Возможные дни рождения
Set<Integer> possibleDays = new HashSet<>();
possibleDays.add(15);
possibleDays.add(16);
possibleDays.add(19);
possibleDays.add(17);
possibleDays.add(18);
possibleDays.add(14);
possibleDays.add(16);
possibleDays.add(14);
possibleDays.add(15);
possibleDays.add(17);

// Возможные месяцы
Set<Integer> possibleMonths = new HashSet<>();
possibleMonths.add(5); // May
possibleMonths.add(6); // June
possibleMonths.add(7); // July
possibleMonths.add(8); // August

// Алгоритм решения
for (int month : possibleMonths) {
Set<Integer> daysInMonth = new HashSet<>();
for (int day : possibleDays) {
if (day == 15 && month == 5) {
daysInMonth.add(day);
} else if (day == 16 && month == 5) {
daysInMonth.add(day);
} else if (day == 19 && month == 5) {
daysInMonth.add(day);
} else if (day == 17 && month == 6) {
daysInMonth.add(day);
} else if (day == 18 && month == 6) {
daysInMonth.add(day);
} else if (day == 14 && month == 7) {
daysInMonth.add(day);
} else if (day == 16 && month == 7) {
daysInMonth.add(day);
} else if (day == 14 && month == 8) {
daysInMonth.add(day);
} else if (day == 15 && month == 8) {
daysInMonth.add(day);
} else if (day == 17 && month == 8) {
daysInMonth.add(day);
}
}

// Альберт не знает день рождения, но знает, что Бернард тоже не знает
if (daysInMonth.size() > 1) {
// Проверяем, знает ли Бернард день рождения
for (int day : daysInMonth) {
// Если есть только один день в месяце, то Бернард знает день рождения
if ( possibleDays.stream ().filter(d -> d == day).count() == 1) {
// Бернард не знает день рождения, так как есть несколько дней в других месяцах
continue;
} else {
// Бернард знает день рождения, так как этот день уникален
// Альберт может определить день рождения, так как он знает, что Бернард знает
System.out.println("День рождения Шерил: " + day + " " + month);
return;
}
}
}
}
}
}
Похожие вопросы