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; }