Решение задачи про улитку и резинку

Материал из Энциклопедия Развитии.

Перейти к: навигация, поиск

Решение задачи про улитку и резинку на разных языках программирования.

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

4Test

[-] testcase snailAndRubber()
	[ ] int iStep = 1
	[ ] int currentLength = 100
	[ ] int lengthIncrease = 5
	[ ] real currentPosition = 0.0
	[ ] int currentHour = 0
	[ ] int iStepHours = 1
	[ ] DATETIME startTime = MakeDateTime(1,1,1,0)
	[ ] DATETIME currentTime = startTime
	[-] while (currentPosition < currentLength)
		[ ] currentTime = AddDateTime(currentTime,0,iStepHours)
		[ ] currentPosition = currentPosition + iStep
		[ ] int previousLength = currentLength
		[ ] currentLength = previousLength + lengthIncrease
		[ ] currentPosition = currentPosition * currentLength / previousLength
		[ ] print("Time:{currentTime}{Tabs(1)}Position:{currentPosition}{Tabs(1)}Length:{currentLength}")
	[ ] 
	[ ] int iHours
	[ ] int iDays = DiffDateTime(currentTime, startTime, iHours)
	[ ] int iTotalHours = iDays*24+iHours
	[ ] print("Win hour: {iTotalHours} ({currentTime}})")

C#

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);
Личные инструменты