题意:上n个台阶,每走一次,所走的台阶只能比少一次所走的多一个,或少一个,或者相等,而且,第一次和最后一次必须为1,求所走次数最少
思路:根据题目要求,每次所走的台阶数,一定要对称,我们可以假设有n阶台阶,那么我们从第一个和最后一个一直向中间靠拢,及第一次为n - 2 * 1,
第二次为n - 2 * 2,第i次为n - 2 * i,一直到n < i,无论最后只剩下多少个台阶,不外乎只是前面中的某个i多走一次。
#include<stdio.h>
int main() {
int t, x, y;
scanf("%d",&t);
while(t--) {
int step, cnt, p, sum;
scanf("%d %d", &x, &y);
step = y - x;
if(step == 0)
printf("0\n");
else {
sum = 0, cnt = 0, p = 1;
while (sum < step) {
sum += p;
cnt++;
if(cnt % 2 == 0)
p++;
}
printf("%d\n", cnt);
}
}
return 0;
}