8.27 京东笔试

1. 第一题:

// 参考:
// https://www.nowcoder.com/discuss/491030
// https://www.nowcoder.com/discuss/490892
// https://blog.csdn.net/zyx_ly/article/details/106766702
//
// 题目:2,3,5组成的所有数的第n个数
//
// 思路:问题转换成十进制n转换成3进制数,用三进制的0,1,2对应题目的2,3,5.
// 由于n的计数不是从0开始而是从1开始, 所以对过程中的n-1再做转换

import java.util.*;

public class Main1 {

   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int n = sc.nextInt();

       for (int i = 1; i <= n; i++) {
           getNumber(i);
       }
   }

   public static void getNumber(int n) {
       StringBuilder sb = new StringBuilder();
       while (n != 0) {
           int temp = (n - 1) % 3; // 获取3进制的个位数
           if (temp == 0) {
               sb.append(2);
           } else if (temp == 1) {
               sb.append(3);
           } else {
               sb.append(5);
           }
           n = (n - 1) / 3; // 获取3进制的十位数等
       }
       sb.reverse();
       System.out.print(sb.toString() + " ");
   }

}

// 输入:
// 12
//
// 输出:
// 2 3 5 22 23 25 32 33 35 52 53 55

2. 第二题:

// 参考:
// https://www.nowcoder.com/discuss/491145
// https://www.nowcoder.com/discuss/490965
// https://www.nowcoder.com/discuss/490872
// https://www.nowcoder.com/discuss/490889
// https://blog.csdn.net/zyx_ly/article/details/104587891
//
// 在金字塔中找路径和最大值,从顶部开始,可向下,左下,右下。
//
// 思路:从顶部开始遍历,计算当前结点可移动到的位置,也就是下一层对应的三个结点。

import java.util.*;

public class Main2 {

   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int n = sc.nextInt();
       int nums[][] = new int[n][2*n + 1];
       for(int i = 0; i < n; i++)
       {
           for(int j = 0; j < 2*i + 1; j++)
           {
               nums[i][j] = sc.nextInt();
           }
       }
       int dp[][] = new int[n][2*n + 1];
       dp[0][0] = nums[0][0];

       for(int i = 0; i < n - 1; i++)
       {
           for(int j = 0; j < 2*i + 1; j++)
           {
               dp[i + 1][j] = Math.max(dp[i + 1][j], dp[i][j] + nums[i + 1][j]);
               dp[i + 1][j + 1] = Math.max(dp[i + 1][j + 1], dp[i][j] + nums[i + 1][j + 1]);
               dp[i + 1][j + 2] = Math.max(dp[i + 1][j + 2], dp[i][j] + nums[i + 1][j + 2]);
           }
       }

       int res = 0;
       for(int i = 0; i < 2*n + 1; i++)
       {
           res = Math.max(res, dp[n - 1][i]);
       }
       System.out.println(res);
   }
}

// 输入:
// 3
// 1
// 2 1 2
// 3 4 2 1 3
//
// 输出:
// 7

参考:

1. 第一题:

  1. 京东java笔试第一题
  2. 08-27京东
  3. 面试题49. 丑数

2. 第二题:

  1. 京东8.27笔试,纪念第一次全A
  2. 8.27 京东笔试Java开发题解(附题目、思路、复杂度)
  3. 8-27京东笔试Java开发题解
  4. 8.27 京东java笔试 代码
  5. 120. 三角形最小路径和

你可能感兴趣的:(秋招笔试)