这是条简单题,调试中遇到的问题是变量应该用float或double,因为fatigue下降的距离会是小数。
代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
double fHeightOfWell, fUpDistance, fDownDistance, fFatigueFactor;
int nDay;
while (1)
{
cin >> fHeightOfWell >> fUpDistance >> fDownDistance >> fFatigueFactor;
if (fHeightOfWell == 0)
{
break;
}
else
{
double nFatigueDistance = (double)fUpDistance * fFatigueFactor / 100;
double nHeightFromBottom = 0;
nDay = 0;
do
{
nDay++;
nHeightFromBottom += fUpDistance;
if (nHeightFromBottom > fHeightOfWell)
{
// climb out of well
break;
}
else
{
nHeightFromBottom -= fDownDistance;
fUpDistance -= nFatigueDistance;
if (fUpDistance < 0)
{
fUpDistance = 0;
}
}
} while (nHeightFromBottom >= 0);
if (nHeightFromBottom > 0)
{
cout << "success on day " << nDay << endl;
}
else
{
cout << "failure on day " << nDay << endl;
}
}
}
return 0;
}