蚂蚱跳跃算法

小B对脑筋急转弯问题很有兴趣,她觉得这种问题的挑战能够反映一个人的应急反应能力。她正在开发一个智力测试的游戏,游戏的主角是一个蚂蚱。蚂蚱最初位于0点处,可以在直线上向正向或反向两个方向跳跃。比较特别的是,蚂蚱每次跳跃的距离比前一次跳跃多一个单位,第一次跳跃的距离为一个单位。


小B的问题是,如果让蚂蚱跳跃到x处,需要经过多少次跳跃,你能解决这个问题吗?

全部评论
int n ; while (cin >> n) { n = n > 0 ? n : 0 - n; int index = 1; int sum = 0; while (sum < n) { sum += index; index++; } if ((sum - n) % 2 == 0) { cout << index - 1 << endl; } else { if (index % 2 == 1) { cout << index << endl; } else { cout << index + 1 << endl; } } }
点赞 回复 分享
发布于 2016-09-19 17:17
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()){ int n = sc.nextInt(); if(n==0 || Math.abs(n)==1){ System.out.println(n); return; } int location1 = -1, location2 = 1; int step = 2; n = Math.abs(n); System.out.println(Math.min(get(n,location1,step),get(n,location2,step))); } } static int get(int x, int location , int step){ while (location<x){ if(location+step>x){ location -= step; step++; }else if(location+step<x){ location += step; step++; }else { break; } } return step; } }
点赞 回复 分享
发布于 2017-08-12 20:55
function main(n){       var sum=0;       var i=0;       while(sum<n){          i++;             sum+=i;                    }       if(sum>n){       var t=sum-n;       var sum1=0;       var a=0;       while(sum1<t){       a++;       sum1+=a;       }       }else{       a=0;       }              return i+a; } 用js写的,写的好简单。。。通过率17%
点赞 回复 分享
发布于 2016-09-19 18:07
有没有人跟我一样用动态规划子问题的规模越来越大,然后傻眼了的(´・ᆺ・`)
点赞 回复 分享
发布于 2016-09-19 17:47
 import java.util.Scanner; public class Main{     public static void main(String[] args){         Scanner scan = new Scanner(System.in);         while(scan.hasNext()){             int x = scan.nextInt();             int temp = x;             if(x<0){                   temp = -x;             }             if(temp==0){                   System.out.println(0);                   continue;             }             int cnt =0;             int sum = 0;             while(sum<temp){                   cnt++;                   sum = sum+cnt;                                }             while((sum-temp)%2!=0){                 cnt++;                 sum = sum+cnt;             }             System.out.println(cnt);                       }     } } 
点赞 回复 分享
发布于 2016-09-19 17:39
import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in) ;         while (sc.hasNextInt()){             int x = sc.nextInt() ;             int step = 0 ;             int cur = 0 ;             int bs = 1 ;             while (cur != x){                 step++ ;                 if(cur > x ){                     if(cur-bs>=x){                         cur = cur-bs ; //向左跳                     }                     else{                         cur = cur+bs ; //向右跳                     }                 }else{                     if(cur+bs <= x){                         cur = cur+bs ; //向右跳                     }                     else                         cur = cur-bs ; //向左跳                 }                 bs++ ;             }             System.out.println(step);         }     } } 我忘记过了多少了, 但是很少,不知道该怎么改了...
点赞 回复 分享
发布于 2016-09-19 17:38
同 17% 
点赞 回复 分享
发布于 2016-09-19 17:24
import java.util.Scanner; public class Main { /** * 蚂蚱跳跃次数 *  * @param desPoint * @return */ public static int jumpCount(int desPoint) { int currentJumpPosition = 0;// 当前跳跃的位置 int jumpStep = 0;// 跳跃步进 int jumpCount = 0;// 跳跃次数 while (currentJumpPosition != desPoint) {// 循环,往一个方向跳跃 if (desPoint > 0) jumpStep += 1; // 正方向 else { jumpStep += -1;// 反方向 } jumpCount++; currentJumpPosition += jumpStep;// 加上步长 // 超过了 if ((desPoint > 0 && currentJumpPosition > desPoint) || (currentJumpPosition < desPoint && desPoint < 0)) { jumpCount--;// 减一 currentJumpPosition -= jumpStep;// 减去步进 jumpStep -= 1;// 减一 boolean isForward = false;// 往后 if (desPoint < 0) { isForward = true;     // 往前 } while (currentJumpPosition != desPoint) {// 来回跳跃,直到达到终点 jumpCount++; if (isForward) {// 往前跳 if (jumpStep > 0) { jumpStep = jumpStep + 1; } else { jumpStep = -jumpStep + 1; } } else { // 往后跳 if (jumpStep > 0) { jumpStep = -jumpStep - 1; } else { jumpStep = jumpStep - 1; } } isForward = !isForward;// 取反 currentJumpPosition += jumpStep;// 加上步长 } } } return jumpCount; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int desPoint = scanner.nextInt();// 目标位置 System.out.println(jumpCount(desPoint)); } } } AC 17%
点赞 回复 分享
发布于 2016-09-19 17:17
完全没思路,求大神贴代码
点赞 回复 分享
发布于 2016-09-19 17:17
完全没有想法,求大神贴一下代码啊
点赞 回复 分享
发布于 2016-09-19 17:16
卧槽...我也是,我是直接放弃最后一道来攻这道的...死活想不出哪个楼了
点赞 回复 分享
发布于 2016-09-19 17:14
都是17%,我还以为就我一个...
点赞 回复 分享
发布于 2016-09-19 17:14
同17%,不知道怎么解决
点赞 回复 分享
发布于 2016-09-19 17:06
只能a 17%。。不知道哪里的问题。。
点赞 回复 分享
发布于 2016-09-19 17:05

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务