乐视——蚂蚁跳跃算法?只能通过67%?

乐视——蚂蚁跳跃算法,一开始用的贪心算法,后来发现只能a 17%,换了个想法。就是x = 1 2 3 4 5...n 在其中加上+和-符号,这样就可以转化为一个一元二次方程组,即为n^2 + n - 2x = 0。用公式法求解,并尝试下n和n+1,从而去发现与目标差距。最后没有尝试n-1和n+2,是不是取整的时候有问题?还是啥?求大神解法。。

底下是我的代码

import java.util.Scanner;

public class Main {
	public static long myCore(long maxNLeft, long a){
		long curSum = maxNLeft * (maxNLeft + 1) / 2;
		long leftResult = maxNLeft;

//		System.out.println("curSum:" + curSum);
		if(curSum == a){
			return maxNLeft;
		}
		else if(curSum > a){
			if((curSum - a) % 2 == 0){
				leftResult += 0;
			}
			else{
				leftResult += 2;
			}
		}
		else{
			leftResult += (a - curSum) * 2;
		}
		
		return leftResult;
	}
	public static long myProcess(long a){
		a = Math.abs(a);
		
		if(a == 0) return 0;
		
		long maxNLeft = (long) ((-1 + Math.sqrt(1 + 8 * a)) / 2.0);
		long maxNRight = maxNLeft + 1;
		
		long maxNLeft0 = maxNLeft - 1;
		long maxNRight0 = maxNLeft + 2;
		
		long leftResult = myCore(maxNLeft, a);
		long rightResult = myCore(maxNRight, a);
		
		long leftResult0 = myCore(maxNLeft0, a);
		long rightResult0 = myCore(maxNRight0, a);
		
		return Math.min(Math.min(leftResult, rightResult), Math.min(leftResult0, rightResult0));
	}
	public static void main(String args[]) {
		Scanner cin = new Scanner(System.in);
		long a;
		while (cin.hasNextLong()) {
			a = cin.nextLong();
			System.out.println(myProcess(a));
		}
	}
}
 


全部评论
代码拿出来啊……不拿出来怎么告诉你错哪里了?
点赞 回复 分享
发布于 2016-09-19 17:25
import java.util.Scanner; public class Main { public static long myCore(long maxNLeft, long a){ long curSum = maxNLeft * (maxNLeft + 1) / 2; long leftResult = maxNLeft; // System.out.println("curSum:" + curSum); if(curSum == a){ return maxNLeft; } else if(curSum > a){ if((curSum - a) % 2 == 0){ leftResult += 0; } else{ leftResult += 2; } } else{ leftResult += (a - curSum) * 2; } return leftResult; } public static long myProcess(long a){ a = Math.abs(a); if(a == 0) return 0; long maxNLeft = (long) ((-1 + Math.sqrt(1 + 8 * a)) / 2.0); long maxNRight = maxNLeft + 1; long maxNLeft0 = maxNLeft - 1; long maxNRight0 = maxNLeft + 2; long leftResult = myCore(maxNLeft, a); long rightResult = myCore(maxNRight, a); long leftResult0 = myCore(maxNLeft0, a); long rightResult0 = myCore(maxNRight0, a); return Math.min(Math.min(leftResult, rightResult), Math.min(leftResult0, rightResult0)); } public static void main(String args[]) { Scanner cin = new Scanner(System.in); long a; while (cin.hasNextLong()) { a = cin.nextLong(); System.out.println(myProcess(a)); } } }
点赞 回复 分享
发布于 2016-09-19 17:32
这题分值好少,才10分
点赞 回复 分享
发布于 2016-09-19 18:13
package cn.veyhey.leshi; import java.util.HashSet; import java.util.Scanner; /**  * Created by jinglong on 16/9/19.  */ public class Main2 {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         while (sc.hasNext()) {             int n = sc.nextInt();             System.out.println(fun(n, 1));         }         sc.close();     }     private static int fun(int n, int step) {         double v = (Math.pow(1 + 8 * n, 0.5) - 1) / 2;         int a = (int) v;         if (a == v) {             return a;         }         //前一步         int res1 = a + 1 + ((a + 1) * (a + 1) + a + 1) - 2 * n;         //后一步         int res2 = a  + 2 * n - (a * a + a );         if (res1 < res2) {             return  res1;         }else {             return res2;         }     } }
点赞 回复 分享
发布于 2016-09-19 18:17
题目是啥?
点赞 回复 分享
发布于 2016-09-19 18:45
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner s = new Scanner(System.in); List<Integer> a = new ArrayList<Integer>(); while(s.hasNextInt()){ a.add(s.nextInt()); } for(int i=0;i<a.size();i++){ System.out.println(getMinStep(a.get(i))); } } public static int getMinStep(int num){ int sum = 0,count=0; while(sum<Math.abs(num)||(sum-Math.abs(num))%2==1){ sum += ++count; } return count; } }
点赞 回复 分享
发布于 2016-09-19 18:50
贪心只过17%,应该是因为没有处理x < 0的情况
点赞 回复 分享
发布于 2016-09-19 18:57

相关推荐

2024-12-27 13:08
华南理工大学 Java
蝴蝶飞出了潜水钟丿:多看一眼就会💥
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务