zoukankan      html  css  js  c++  java
  • 美团点评2017秋招笔试编程题

    https://www.nowcoder.com/test/5583018/summary

    这套题目难度不大,主要是考了递归调用、完全背包、栈、字典树

    看得出是数据结构的题目多一些,最开始第二个题目,一个完全背包的,没看出来是完全背包,感觉数据量不大,递归可以求吧

    结果说数字大一点算不出答案,后来改循环,发现还是很多算不出,然后做别的题目去了,最后才做这个,才发现是个裸的完全背包。

    第一题:用骰子来控制走的步数,然后给你一个总的步数,求走法有多少种

    思路:递归分解即可

     1 import java.util.*;
     2  
     3 public class Main {
     4     public static void main(String[] args) {
     5         Scanner cin = new Scanner(System.in);
     6         int x = cin.nextInt();
     7         System.out.println(deal(x));
     8     }
     9     static int deal(int x){
    10         if(x==0)
    11             return 1;
    12         int num = 0;
    13         for(int i = 1;i<=6;i++){
    14             if(x-i>=0){
    15                 num+=deal(x-i);
    16             }else
    17                 return num;
    18         }
    19         return num;
    20     }
    21 }

    第二题:给你六种纸币(1,5,10,20,50,100),每种纸币有无限多个,求N元钱用这六种纸币组合可以有多少种组合方法

    思路:完全背包,把纸币的数量看成是重量,然后N元钱看成背包大小即可

     1 import java.util.*;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         Scanner cin = new Scanner(System.in);
     6         int weight[] = {1,5,10,20,50,100};
     7         Long dp[][] = new Long[10][10005];
     8         int n = cin.nextInt();
     9         for(int i = 0;i<dp.length;i++)
    10             for(int j = 0;j<dp[i].length;j++)
    11                 dp[i][j] = 0L;
    12         dp[0][0] = 1L;
    13         for(int i = 1;i<=weight.length;i++){
    14             for(int j = 0;j<=n;j++){
    15                 if(j< weight[i-1])
    16                     dp[i][j] = dp[i-1][j];
    17                 else
    18                     dp[i][j] = dp[i-1][j]+dp[i][j-weight[i-1]];
    19             }
    20         }
    21         System.out.println(dp[weight.length][n]);
    22     }
    23 }

    第三题:和POJ这个题目一样http://www.cnblogs.com/Tree-dream/p/5701137.html

    第四题:给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度

    思路:构建字典树进行比较即可

     1 import java.util.*;
     2  
     3 public class Main {
     4     public static void main(String[] args) {
     5         Scanner cin = new Scanner(System.in);
     6         String str = cin.nextLine();
     7         String p = cin.nextLine();
     8         Node root = new Node();
     9         for(int i = 0;i<str.length();i++){
    10             if(root.next[str.charAt(i)]==null){
    11                 root.next[str.charAt(i)] = new Node(str.charAt(i));
    12                 add(root.next[str.charAt(i)],str.substring(i+1));
    13             }else {
    14                 add(root.next[str.charAt(i)],str.substring(i+1));
    15             }
    16         }
    17         int max = 0;
    18         for(int i = 0;i<p.length();i++){
    19             if(root.next[p.charAt(i)]!=null){
    20                 int tmp = Find(root,p.substring(i));
    21                 if(tmp>max)
    22                     max = tmp;
    23             }
    24         }
    25         System.out.println(max);
    26     }
    27  
    28     static int Find(Node root,String x){
    29         Node tmp = root;
    30         int leng = 0;
    31         for(int i = 0;i<x.length();i++){
    32             if(tmp.next[x.charAt(i)]!=null){
    33                 leng++;
    34                 tmp = tmp.next[x.charAt(i)];
    35             }else
    36                 break;
    37         }
    38         return leng;
    39     }
    40  
    41     static void add(Node node,String x){
    42         Node tmp = node;
    43         for(int i = 0;i<x.length();i++){
    44             if(tmp.next[x.charAt(i)]==null)
    45                 tmp.next[x.charAt(i)] = new Node(x.charAt(i));
    46             tmp = tmp.next[x.charAt(i)];
    47         }
    48     }
    49 }
    50 class Node{
    51     Node next[] = new Node[200];
    52     char str;
    53     Node(char x){
    54         this.str = x;
    55         for(int i = 0;i<100;i++)
    56             next[i] = null;
    57     }
    58     Node(){
    59  
    60     }
    61 }

  • 相关阅读:
    day⑥:logging模块
    day⑥:shelve模块
    day⑥:xml模块
    day⑤:冒泡排序
    day⑤:模块
    day⑤:re深入
    day④:递归
    day④:迭代器
    day④:装饰器
    day③:函数式编程
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/8545789.html
Copyright © 2011-2022 走看看