京东的笔试题第K个幸运数和幸运数AC代码

很多人都说了一道什么烽火的题目,我看了一下,真是长啊,估计我这两道题比较简单。
我遇到的题目是第K个幸运数和幸运数两道题目,做的过程中近乎心态爆炸,最后实力AC了
#阿里巴巴##腾讯##百度##京东##Java工程师#
全部评论
import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; publicclass Main {     public static void main(String[] args) {         Solution s = new Solution();         s.doBefore();         Scanner sc = new Scanner(System.in);         int t = sc.nextInt();         for(int i = 0; i < t; i++) {             int n = sc.nextInt();             s.getResult(n);         }         sc.close();     } } class Solution {     public ArrayList<int[]> curResult = new ArrayList<int[]>();     publicboolean mark = false;          public void doBefore() {         int last = 0;         for(int i = 1; i <= 100000; i++) {             if(f(i) == g(i)) {                 int[] arr = {i, ++last};                 curResult.add(arr);             }         }     }          public void getResult(int n) {                  int result = 1;         for(int i = 0; i < curResult.size(); i++) {             if(curResult.get(i)[0] <= n) {                 result = curResult.get(i)[1];             } else                 break;                      }         System.out.println(result);              } //        int curMostClosed = 1; //        int result = 1; //当前结果是0; //         //        if (mark) { //            for (int k : curResult.keySet()) { //                if (k > curMostClosed && k <= n) { //                    curMostClosed = k; //                } //            } //            result = curResult.get(curMostClosed); //        } //        mark = true; //         //        for(int i = curMostClosed + 1; i <= n; i++) { //            if(f(i) == g(i)) //                result++; //        } //        curResult.put(n, result); //         //        System.out.println(result); //    }     privateint f(int n ) {         int result = 0;         while(n != 0) {             result += n % 10;             n /= 10;         }         return result;     }     privateint g(int n ) {         int result = 0;         while(n != 0) {             result += (n & 1) == 1 ? 1 : 0;             n >>>= 1;         }         return result;     }      } 这是幸运数那道题,打注释的是我一开始写的方法,后来发现本地运行是可以的,但是OJ说是运行时错误,于是开始使劲想,发现其实输入大小不是很大,于是直接预处理搞了100000个数。结果这样就AC了
点赞 回复 分享
发布于 2016-09-05 21:32
要不我把我ac的代码发一下吧
点赞 回复 分享
发布于 2016-09-05 21:24
java 的吗?我是一个爬山的,一个各种进制换算位数求和的…
点赞 回复 分享
发布于 2016-09-05 21:25
什么代码ac的?我本地调都过,线上0
点赞 回复 分享
发布于 2016-09-05 21:29
import java.util.Scanner; publicclass Main {     public static void main(String[] args) {         Solution s = new Solution();         Scanner sc = new Scanner(System.in);         int t = sc.nextInt();         for(int i = 0; i < t; i++) {             long num = sc.nextLong();             s.getResult(num);         }                  sc.close();     } } class Solution {     public void getResult(long num) {         long dig = 0;         long c = 0;         long i = 1;         while(c < num) {             dig++;             c += i <<= 1;         }         c -= i;         c++;                  long s = num - c;         String result = new String();         for(long k = 0; k < dig; k++) {             if((s & 1l) == 1l) {                 result = "7" + result;             } else {                 result = "4" + result;             }             s >>>= 1;         }         System.out.println(result);     }      } 写的很不好(当时很急)
点赞 回复 分享
发布于 2016-09-05 21:29
这个两个代码都是当时写的,现在看起来都很不规范。
点赞 回复 分享
发布于 2016-09-05 21:37
反正烽火台我是跪了。。。后面那个买东西算最高最低价倒是过了的
点赞 回复 分享
发布于 2016-09-05 21:44
666,佩服佩服!
点赞 回复 分享
发布于 2016-09-05 21:59
我去....这运气没谁了....
点赞 回复 分享
发布于 2016-09-05 22:22
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Solution s = new Solution(); s.doBefore(); Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for(int i = 0; i < t; i++) { int n = sc.nextInt(); s.getResult(n); } sc.close(); } } class Solution { public ArrayList<int[]> curResult = new ArrayList<int[]>(); // public boolean mark = false; public void doBefore() { int last = 0; for(int i = 1; i <= 100000; i++) { if(f(i) == g(i)) { int[] arr = {i, ++last}; curResult.add(arr); } } } public void getResult(int n) { int result = 1; for(int i = 0; i < curResult.size(); i++) { if(curResult.get(i)[0] <= n) { result = curResult.get(i)[1]; } else break; } System.out.println(result); } // int curMostClosed = 1; // int result = 1; //当前结果是0; // // if (mark) { // for (int k : curResult.keySet()) { // if (k > curMostClosed && k <= n) { // curMostClosed = k; // } // } // result = curResult.get(curMostClosed); // } // mark = true; // // for(int i = curMostClosed + 1; i <= n; i++) { // if(f(i) == g(i)) // result++; // } // curResult.put(n, result); // // System.out.println(result); // } private int f(int n ) { int result = 0; while(n != 0) { result += n % 10; n /= 10; } return result; } private int g(int n ) { int result = 0; while(n != 0) { result += (n & 1) == 1 ? 1 : 0; n >>>= 1; } return result; } }
点赞 回复 分享
发布于 2016-09-06 15:28

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务