P1426 小鱼会有危险吗

题目

有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%。有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下1秒的时间内马上游出探测器的范围,还是安全的。现在给出s和x的数据,请你判断小鱼会不会有危险?如果有危险输出'y',没有危险输出'n'。

//感谢黄小U饮品完善题意

输入格式

一行内输入两个实数,用空格分隔,表示s和x。均不大于100

输出格式

一行内输出'y'或者'n'表示小鱼是否会有危险。

输入输出样例

输入 14 1

输出  n

分析

看了题解有很多用物理公式的。我真的看不懂了,昨天看MRI的原理,发现已经对这些物理知识失去了感知。

想法是这样的:对秒数进行循环,循环体中,查看当前已经走过的所有路程是否到达了探测器的边界 s - x。如果到达了探测器的边界,再判断下一秒有没有逃出探测器的另一个边界 s + x。

第2个测试点是,刚开始的时候,小鱼在不在探测器的范围内。如果已经在探测器的范围内了,那就肯定会有危险。

代码

#include
#include
#include
#include
using namespace std;
int main()
{
	double s , x;
	cin >> s >> x;
	double s1 = 7.0;
	double sum = 0;
	if( s <= x)
	{
		cout << 'y' ;
		return 0;
	}
	
	for(int i = 1 ; i <= 1000 ; i ++)
	{
		double curs ;
		if( i == 1) 
			curs = 7.0;
		else 
			curs = s1 * 0.98 ;
			
		s1 = curs; // next i
		sum += curs;
		
		if(sum >= s - x)
		{
			//cout << i << endl;
			double nextsums = sum + curs * 0.98;
			if(nextsums > s + x)
				cout << 'n';
			else 
				cout << 'y';
			
			break;
		}
	}

}

 

你可能感兴趣的:(算法,#,模拟)