翻译 + 代码 * 2
2024-04-06 12:22:39
发布于:陕西
31阅读
0回复
0点赞
翻译:
从原点开始移动,目标为点 。第 次移动 个单位。每次皆可以向左、右两个方向跳跃,求到达 所需要的最少移动次数。
输入仅一行,一个整数 。
输出到达 所需要的最少移动次数。
代码 * 2:
代码1:
#include<cstdio>
int main() {
int x,ans=0;
scanf("%d",&x);
if(x<0) //将负点转换为正点
x=-x;
for(int i=1,t=1;x&&!ans;++i,t+=i) //i为跳跃次数,t为累计跳跃的距离
if(t==x||(t>x&&!((t-x)%2)))
ans=i; //符合分析中的条件便跳出循环
printf("%d",ans);
return 0;
}
代码2:
#include<bits/stdc++.h>//万能头
using namespace std;
inline int read(){//快读,可快了,虽然这道题没什么用
int x=0;char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=x*10+(ch^48),ch=getchar();
return x;
}
int main(){
int x=read(),ans=0,l=0,r=sqrt(x+x)+1;//二分边界设到平方刚好大于x即可
while(l<=r){
int m=l+r>>1;
if(m*(m+1)/2<x)l=m+1;
else r=m-1;
}//普通二分
if((l*(l+1)/2-x)&1)++l;
if((l*(l+1)/2-x)&1)++l;//最多进行两次
printf("%d\n",l);
return 0;//好习惯
}
全部评论 3
能把号送我吗(
2024-04-18 来自 广东
0破防哥😓
2024-04-06 来自 浙江
0乐子,我陈述事实还要说被我气死了是吧😓,抄袭题解你还有理了是吧😓,被禁言3天又开始抄袭题解了是吧😓
2024-04-06 来自 浙江
0
有帮助,赞一个