C语言题(步数)求代码步数(steps.cpp)数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/27 19:39:30
![C语言题(步数)求代码步数(steps.cpp)数轴上有两个点x和y,移动规则如下:第一步和最后一步的间距必须为1,除第一步外,每一步的间距都必须比前一步的间距最多相差1(其差值的绝对值为0或1](/uploads/image/z/1023901-61-1.jpg?t=C%E8%AF%AD%E8%A8%80%E9%A2%98%EF%BC%88%E6%AD%A5%E6%95%B0%EF%BC%89%E6%B1%82%E4%BB%A3%E7%A0%81%E6%AD%A5%E6%95%B0%28steps.cpp%29%E6%95%B0%E8%BD%B4%E4%B8%8A%E6%9C%89%E4%B8%A4%E4%B8%AA%E7%82%B9x%E5%92%8Cy%2C%E7%A7%BB%E5%8A%A8%E8%A7%84%E5%88%99%E5%A6%82%E4%B8%8B%EF%BC%9A%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%92%8C%E6%9C%80%E5%90%8E%E4%B8%80%E6%AD%A5%E7%9A%84%E9%97%B4%E8%B7%9D%E5%BF%85%E9%A1%BB%E4%B8%BA1%2C%E9%99%A4%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%A4%96%2C%E6%AF%8F%E4%B8%80%E6%AD%A5%E7%9A%84%E9%97%B4%E8%B7%9D%E9%83%BD%E5%BF%85%E9%A1%BB%E6%AF%94%E5%89%8D%E4%B8%80%E6%AD%A5%E7%9A%84%E9%97%B4%E8%B7%9D%E6%9C%80%E5%A4%9A%E7%9B%B8%E5%B7%AE1%EF%BC%88%E5%85%B6%E5%B7%AE%E5%80%BC%E7%9A%84%E7%BB%9D%E5%AF%B9%E5%80%BC%E4%B8%BA0%E6%88%961)
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;
}