Наткнулся на обсуждение в форуме. Речь о том, что американец приводит задачу для наших 6-7 класса, и спрашивает, могут ли американские сверстники ее решить.
Суть в том, что: На рассвете, две машины выехали из городов А и Б навстречу друг другу. В полночь они встретились, и покатили дальше. Автомобиль из города А приехал в 4 PM, второй автомобиль - в 9 PM. Расстояние между городами 500 миль. Вопрос - когда же у них рассвет?
Я тряхнул стариной, и кое-как вспомнил, как решать такие задачи. Свое решение привел на том же форумы. Но что странно, американцы так и не предложили правильное решение. Есть пара ошибочных вариантов, но они даже не проверили их. Я крайне далек от мысли, что "ну тупые...", но с математикой похоже и правда проблема. Отсюда интересно, а много ли русских, смогут решить эту задачу?
Вообще же, впечатления от чтения американского форума весьма неплохие, народ там хороший, и я с ними согласен гораздо чаще, чем с соотечественниками. Но это как-нибудь в другой раз.
Суть в том, что: На рассвете, две машины выехали из городов А и Б навстречу друг другу. В полночь они встретились, и покатили дальше. Автомобиль из города А приехал в 4 PM, второй автомобиль - в 9 PM. Расстояние между городами 500 миль. Вопрос - когда же у них рассвет?
Я тряхнул стариной, и кое-как вспомнил, как решать такие задачи. Свое решение привел на том же форумы. Но что странно, американцы так и не предложили правильное решение. Есть пара ошибочных вариантов, но они даже не проверили их. Я крайне далек от мысли, что "ну тупые...", но с математикой похоже и правда проблема. Отсюда интересно, а много ли русских, смогут решить эту задачу?
Вообще же, впечатления от чтения американского форума весьма неплохие, народ там хороший, и я с ними согласен гораздо чаще, чем с соотечественниками. Но это как-нибудь в другой раз.
no subject
Date: 2011-09-27 11:07 pm (UTC)From:no subject
Date: 2011-09-28 03:42 am (UTC)From:no subject
Date: 2011-09-28 03:54 am (UTC)From:"Встречаются два приятеля - математика:
- Ну как дела, как живешь?
- Все хорошо, два сына - ещё не доросли до школьного возраста.
- Сколько им лет?
- Произведение их возрастов равно количеству голубей возле этой скамейки.
- Этой информации мне недостаточно.
- Старший похож на мать.
- Теперь я знаю ответ на твой вопрос.
Сколько лет сыновьям?"
Честно сказать - сам я не догадался как ее решить - посмотрел в интернете, оказалось все совсем несложно.
no subject
Date: 2011-09-28 06:18 am (UTC)From:Если считать дошкольника от 0 до 6 лет, то кол-во голубей 0-36. Т.к. среди них есть старший и младший, значит разница минимум в 1 год (вообще это не совсем так, у близнецов тоже считается есть старший и младший), то получаем 0-30 голубей.
Значит надо привязываться к другим подсказкам. Похожесть на маму - ложный след, т.к. это видно с 0 лет. Можно ограничиться возрастом дошкольника 4-6 лет, но это надо было объявлять в условиях задачи. Или кол-во объектов, которые можно охватить одним взглядом. 30 голубей не так просто пересчитать. Но это антиматематический подход, мне это не нравится, это могли быть 2 чокнутых математика, которые считают все на своем пути, в т.ч. и стаи голубей.
Нужно привязаться к тому, что далеко не все числа 0-30 можно получить перемножением целых чисел. Т.е. 29 - нельзя. Но в любом случае, надо предварительно ограничить возраст дошкольников.
Похоже, надо брать минимальное число, которое можно получить произведением чисел 4-6, но это решение от фонаря. Подумаю еще.
no subject
Date: 2011-09-28 06:35 am (UTC)From:no subject
Date: 2011-09-28 07:13 am (UTC)From:no subject
Date: 2011-09-28 08:11 am (UTC)From:no subject
Date: 2011-09-28 09:05 am (UTC)From:no subject
Date: 2011-09-28 09:24 am (UTC)From:Вот она:
http://users.livejournal.com/_darkus_/592464.html
Честно говоря, голову пришлось поломать и программа вышла не такой уж короткой и тривиальной.
no subject
Date: 2011-09-28 10:07 pm (UTC)From:Cделал ф-ей, получающей перемножение возрастов как аргумент от 1 до 100. И мгновенно получил список этих чисел, кроме 36, удовлетворяющих условиям.
Это C#, но будет работать и для JavaScript и Java (кроме печати текста).
Он не самый короткий, но имхо самый понятный и простой, с ним может разобраться любой студент, и даже школьник.
Можно оптимизировать скорость, уменьшить количетсво строк, но это хуже скажется на читаемости.
public static void F1( int xyz) { for (int x = 1; x < xyz; x++) { for (int y = 1; y < xyz; y++) { if (x * y > xyz) continue; for (int z = 1; z < xyz; z++) { if (x * y * z != xyz) continue; // должен быть младший if (x >= y || y > z || x >= z) continue; if( !IsTrollbus(x+y+z, xyz)) continue; // результат StringBuilder sb=new StringBuilder(); sb.Append("xyz="); sb.Append(xyz); sb.Append(" - x="); sb.Append(x); sb.Append(" y="); sb.Append(y); sb.Append(" z="); sb.Append(z); sb.AppendLine(); Console.Write(sb.ToString()); } } } } private static bool IsTrollbus(int sm, int xyz) { // возвращает - сколько вариантов возрастов существуют, которые в сумме дают заданную // если больше 1, то условие с троллейбусом выполнилось int cnt = 0; for (int x = 1; x < xyz; x++) { for (int y = 1; y < xyz; y++) { if (x * y > xyz) continue; for (int z = 1; z < xyz; z++) { if (x * y * z != xyz) continue; if (x > y || y > z || x > z) continue; if (sm - x - y - z == 0) cnt++; if (cnt > 1) return true; } } } return cnt > 1; }PS. Достали опечатки, из-за которых пришлось перевыкладывать.
no subject
Date: 2011-09-29 08:23 am (UTC)From:Вот там выкладывал решение: http://users.livejournal.com/_darkus_/592464.html?thread=12193872#t12193872
Само оно тут: http://pastebin.com/avERExER
Это Python :) По привычке программа вышла в функциональном стиле с list comprehensions и функциями высшего порядка.