【正经题解】跳跳舞の跃
2024-03-18 14:37:10
发布于:浙江
5阅读
0回复
0点赞
初始化步长 为 ,跳跃的累积和 为 。
进行循环,每次增加步长 ,并将其加到累积和 中。
判断是否达到目标位置 ,如果达到,则输出步数,结束循环。
如果未达到目标位置,继续增加步长 直到达到目标位置。
如果目标位置不是当前步数累积和的形式,继续增加步长 直到找到一个符合条件的步数。
输出步数。
#include <iostream>
#include <cmath>
#define int long long
using namespace std;
signed main() {
int T;
cin >> T;
while (T--) {
int x;
cin >> x;
x = abs(x);
if (x != 0) {
int n = 1;
int sm = 1;
// 计算最小的步数
while (sm < x) {
++n;
sm += n;
}
// 如果当前步数刚好等于目标位置,输出步数
if (n * (n + 1) >> 1 == x) {
cout << n << endl;
continue;
}
// 如果不等于,继续找下一个步数
while (((n * (n + 1) >> 1) - x) & 1) {
++n;
}
cout << n << endl;
} else {
cout << 0 << endl;
}
}
return 0;
}
这里空空如也
有帮助,赞一个