LifeIdea.org

Эффективная, интересная и счастливая жизнь

Про улитку и резинку

Однажды на уроке информатики в школе, учительница задала нам следующую задачу:
Улитка начинает свое движение по резинке длинной 1 метр. Каждый час улитка проползает 1 см, а резинка растягивается на 5 см. Считаем, что длинна улитки не имеет значения. Достигнет ли когда-нибудь улитка другого конца резинки, и если достигнет, то через сколько часов?

Услышав эту задачу, народ стал выкрикивать готовые решения вроде «достигнет!», «не достигнет!», а то и «резинка порвёться раньше» :), на что учительница предложила написать простенькую программу, которая бы и являлась одновременно решением этой задачи и доказательством его. Вот пример решения:

int step = 1;
int currentLength = 100;
int lengthIncrease = 5;
double currentPosition = 0.0;
int currentHour = 0;
while (currentPosition < currentLength) {
 // one hour pass
 currentHour = currentHour + 1;
 // snail makes one step
 currentPosition = currentPosition + step;
 // rubber length increased
 int previousLength = currentLength;
 currentLength = previousLength + lengthIncrease;
 currentPosition = currentPosition * currentLength / previousLength;
 // see current state
 Console.WriteLine("Hour:{0}tPosition:{1}tLength:{2}",
        currentHour, currentPosition, currentLength);
}
int year = currentHour / 24 / 7 / 52; 
int week = (currentHour / 24 / 7) % 52; 
int day = (currentHour / 24) % 7; 
int hour = currentHour % 24; 
Console.WriteLine("Win hour: {0} ({1} year, {2} week, {3} day, {4} hour)",
        currentHour,year,week,day,hour);

Исправив приведённый выше код на синтаксис своего любимого языка (смотрите решение задачи про улитку и резинку на других языках) и запустив программу, либо поверив мне на слово, выясняем, что улитка всё же достигнет конца резинки и если будет продолжать так же энергично ползти по сантиметру в час, то сможет заползть на руку тянущему не позже чем через месяц.

Прежде чем покорить новую для нас область знаний, мы можем чувствовать себя как улитка в задаче приведённой выше. Впереди ещё неограниченные просторы всего, что нам ещё предстоит познать. Начиная двигаться шаг за шагом, мы замечаем, что и знаний становиться гораздо больше. Всё, что предстоит познать очень похоже на бесконечно растягивающуюся резинку. Однако если делать регулярно один шаг в одном направлении, мы неминуемо достигаем любой поставленной цели.

Интересно, что даже если в задаче про улитку и резинку увеличить первоначальную величину резинки до 10 метров улитка всё равно доползает до другого конца. И даже если шаг её будет 1 миллиметр в час, она всё равно доползает. Говоря словами Лао Цзы, «Путешествие длинною в тысячу миль. всегда начинается с одного шага!»

Если ты находишь эту статью полезной для себя, ты можешь поблагодарить автора LifeIdea.org!

Related Articles:

Автор: Миша Субоч

Основатель портала http://lifeidea.org, руководитель группы cпециалистов по автоматизированному тестированию программного обеспечения в EPAM Systems, Inc, выпускник Белорусского Государственного Университета Информатики и Радиоэлектроники по специальности "Информатика" факультета Компьютерных Систем и Сетей, минчанин, уроженец Молодечно, родом с Вилейки.

Комментарии закрыты.