1057 - 算步数
时间限制 : 1 秒
内存限制 : 32 MB
给你坐标轴上的两个点A和B,请问从A走到B最少需要多少步?
我们对走的每一步的步长作出如下限制:
第一步和最后一步的步长必须是1,其他的任意一步的步长必须比前一步的步长小1、大1或相等。
题目输入
输入包含多组测试数据。每组输入两个整数A和B(0<=A<=B<2^31)。
题目输出
对于每组输入,输出从A走到B最少需要多少步。
输入/输出样例
输入格式
45 48 45 49 45 50
输出格式
3 3 4
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; }
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; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int A = in.nextInt(); int B = in.nextInt(); if (B - A >= 0 && B - A <= 3) { System.out.println(B - A); continue; } int i = 1; int a = B - A; int res = 0; while (a >= 2 * i) { a -= 2 * i++; res += 2; } if (a <= i&&a>0) { res++; } else if (a > i) { res += 2; } System.out.println(res); } } }