Решение задачи про улитку и резинку
Материал из Энциклопедия Развитии.
Решение задачи про улитку и резинку на разных языках программирования.
Условие задачи: Улитка начинает свое движение по резинке длинной 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);

