UVA 846-Steps
题目大意:给两个点,然后从一个点走到另一个点。最少多少步,第一步和最后一步都为1.中间的步距离只能和前一步相等,或多一,或少一。
解题思路:2*x个点最大步数为x *(x+1),2*x-1最大步数为x*x
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int n;
cin >> n;
while(n--) {
long long int a, b;
long long int m;
scanf("%lld%lld", &a, &b);
long long int c = b - a;
long long int x = ((int)sqrt(c));
if(c == 0) {
printf("0\n");
continue;
}
else if(c == x * x)
m = 2 * x - 1;
else if(c > x * x && c <= (x + 1) * x)
m = 2 * x;
else if(c > (x + 1) * x)
m = 2 * x + 1;
printf("%lld\n", m);
}
return 0;
}