游客 Signup | Login
中文 | En

1057 - 算步数

给你坐标轴上的两个点A和B,请问从A走到B最少需要多少步?
我们对走的每一步的步长作出如下限制:
第一步和最后一步的步长必须是1,其他的任意一步的步长必须比前一步的步长小1、大1或相等。

Input

输入包含多组测试数据。每组输入两个整数A和B(0<=A<=B<2^31)。

Output

对于每组输入,输出从A走到B最少需要多少步。

Examples

Input

45 48
45 49
45 50

Output

3
3
4

Solution C

#include<stdio.h>
#include<math.h>

int main()
{
	int x,y,i,s,d,n;
	while(scanf("%d%d",&x,&y)!=EOF)
	{
		d=y-x;
		n=sqrt(d);
		if(d<4)
			printf("%d\n",d);
		else
		{
			if(d==n*n)
				s=2*n-1;
			else if(d>n*n&&d<=n*n+n)
				s=2*n;
			else
				s=2*n+1;
			printf("%d\n",s);
		}
	}
	return 0;
}

Solution C++

#include<stdio.h>
#include<math.h>

int main()
{
	int x,y,i,s,d,n;
	while(scanf("%d%d",&x,&y)!=EOF)
	{
		d=y-x;
		n=sqrt(d);
		if(d<4)
			printf("%d\n",d);
		else
		{
			if(d==n*n)
				s=2*n-1;
			else if(d>n*n&&d<=n*n+n)
				s=2*n;
			else
				s=2*n+1;
			printf("%d\n",s);
		}
	}
	return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题