Наткнулся на обсуждение в форуме. Речь о том, что американец приводит задачу для наших 6-7 класса, и спрашивает, могут ли американские сверстники ее решить.
Суть в том, что: На рассвете, две машины выехали из городов А и Б навстречу друг другу. В полночь они встретились, и покатили дальше. Автомобиль из города А приехал в 4 PM, второй автомобиль - в 9 PM. Расстояние между городами 500 миль. Вопрос - когда же у них рассвет?
Я тряхнул стариной, и кое-как вспомнил, как решать такие задачи. Свое решение привел на том же форумы. Но что странно, американцы так и не предложили правильное решение. Есть пара ошибочных вариантов, но они даже не проверили их. Я крайне далек от мысли, что "ну тупые...", но с математикой похоже и правда проблема. Отсюда интересно, а много ли русских, смогут решить эту задачу?
Вообще же, впечатления от чтения американского форума весьма неплохие, народ там хороший, и я с ними согласен гораздо чаще, чем с соотечественниками. Но это как-нибудь в другой раз.
Суть в том, что: На рассвете, две машины выехали из городов А и Б навстречу друг другу. В полночь они встретились, и покатили дальше. Автомобиль из города А приехал в 4 PM, второй автомобиль - в 9 PM. Расстояние между городами 500 миль. Вопрос - когда же у них рассвет?
Я тряхнул стариной, и кое-как вспомнил, как решать такие задачи. Свое решение привел на том же форумы. Но что странно, американцы так и не предложили правильное решение. Есть пара ошибочных вариантов, но они даже не проверили их. Я крайне далек от мысли, что "ну тупые...", но с математикой похоже и правда проблема. Отсюда интересно, а много ли русских, смогут решить эту задачу?
Вообще же, впечатления от чтения американского форума весьма неплохие, народ там хороший, и я с ними согласен гораздо чаще, чем с соотечественниками. Но это как-нибудь в другой раз.
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 и функциями высшего порядка.