C语言题(步数)求代码步数(steps.cpp)数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 22:56:26
C语言题(步数)求代码步数(steps.cpp)数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1
C语言题(步数)求代码
步数(steps.cpp)
数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1).编程计算从x移动到y至少需要多少步.
输入格式:
第一行为正整数t(≤100),表示数据组数.接下来t行,每行两个整数x和y(0≤x≤y≤2^31-1).
输出格式:
对于每组数据,输出最少的移动步数.
C语言题(步数)求代码步数(steps.cpp)数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1
#include
#include
int abs (int x)
{
return x > 0 ? x : -x;
}
int main()
{
int n,a,b,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
n = abs(b - a);
int tmp = (int)(sqrt(n*1.0));
int step = tmp + tmp - 1;
int total = tmp * tmp;
if(n - total >= tmp + 1)
step += 2;
else if(n - total > 0)
step ++;
printf("%d\n",step);
}
return 0;
}