1. 程式人生 > 其它 >UVA573 The Snail 題解

UVA573 The Snail 題解

題目:傳送門

思路:

典中典的小學奧數蝸牛爬井題,按照題目進行模擬即可,需要注意的是:蝸牛每天可以向上爬的距離等於前一天所爬的距離減去 \(r\)\(r\) 等於第一天可以向上爬的距離乘以疲勞度除以 \(100\) )。(詳見程式碼)

程式碼:

#include <bits/stdc++.h>
  using namespace std;
double t,r,h,p,q,o;//開始時定義為浮點型別,便於運算。 
int s;
int main()
{
	while (true)
	{
		scanf("%lf%lf%lf%lf",&h,&p,&q,&o);
		if (!h) break;//當井的高度為零時退出迴圈。 
		t=0;//記得初始化 
		s=0;
		r=p*o/100;//計算出蝸牛每天向上爬的距離比前一天少多少。 
		while (true)
		{
			s++;
			t+=p;
			if (t>h) break;//如果蝸牛爬出了井則退出迴圈。 
			t-=q;//若蝸牛沒有爬出井則向下滑。 
			if (t<0) break;//如果蝸牛滑到了井底則退出迴圈。 
			p-=r;//第二天向上爬的距離 
			if (p<0) p=0;//如果第二天可以向上爬的距離為負,則重置為 0 ,否則第二天會向下滑更多的距離。 
		}
		if (t>h) printf("success on day %d\n",s);
		if (t<0) printf("failure on day %d\n",s);
	}
	return 0;
}