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

    美团点评2017秋招笔试编程题

    1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。

    题解: 

      写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂。 

    #include <cstdio>
     
    int main(){
         
        int n, ans;
        while(scanf("%d", &n) != EOF){
            if(n <= 0){
                printf("%d
    ", 0);
                continue;
            }
            ans = 1;
            for(int i=1; i<n; ++i){
                ans *= 2;
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    

      

    2, 给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。

    题解: 

      多一个 bill 选项, 则可以从 该bill 值的 0,1,2 ... j/bill , 这么多种集合。dp[i][j] = dp[i][j] + dp[i-1][j - k*bill[i] ]; 

    #include <iostream> 
    #include <cstdio> 
    #include <cstring> 
    #include <cstdlib> 
    using namespace std; 
    const int MAXN = 10000 + 10; 
    const int BILL[6] = {1, 5, 10, 20, 50, 100}; 
    
    int n, dp[6][MAXN]; 
    
    void init(){
        memset(dp, 0, sizeof(dp)); 
        for(int i=0; i<MAXN; ++i){
            dp[0][i] = 1; 
        }
        for(int i=1; i<6; ++i){
            for(int j=1; j<MAXN; ++j){
                for(int k=0; k*BILL[i] <= j; ++k){
                    dp[i][j] += dp[i-1][j - k*BILL[i]]; 
                }
            }
        }
    }
    
    int main(){
        freopen("in.txt", "r", stdin); 
    
        init(); 
        while(scanf("%d", &n) != EOF){
            printf("%d
    ", dp[5][n] );
        }
        return 0; 
    }
    

      

    3, 给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。

    题解: 

      经典的最大矩形问题。使用 left and right array, 分别记录每一个pt可以扩展的最大距离。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    const int MAXN = 10000 + 10;
     
    int n, tmp, ans, num[MAXN], lft[MAXN], rgt[MAXN];
     
     
    int main(){
     
        while(scanf("%d", &n) != EOF){
            for(int i=1; i<=n; ++i){
                scanf("%d", &num[i]);
            }
            num[0] = num[n+1] = 0;
     
            for(int i=1; i<=n; ++i){
                tmp = i - 1;
                while(num[i] <= num[tmp]){
                    tmp = lft[tmp] - 1;
                }
                lft[i] = tmp + 1;
            }
     
            for(int i=n; i>=1; --i){
                tmp = i + 1;
                while(num[i] <= num[tmp]){
                    tmp = rgt[tmp] + 1;
                }
                rgt[i] = tmp - 1;
            }
            ans = 0;
            for(int i=1; i<=n; ++i){
                ans = max(ans, num[i]*(rgt[i] - lft[i] + 1));
            }
            printf("%d
    ", ans );
        }
        return 0;
    }
    

      

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

    题解:

      使用 动态规划。 

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    const int MAXN = 100 + 10;
     
    char ch1[MAXN], ch2[MAXN];
     
    int dp[MAXN][MAXN];
     
    int get_line(char *line, int max_size){
        int c, len = 0;
        while( (c = getchar()) != EOF && len < max_size ){
            line[len++] = c;
            if(c == '
    '){
                break;
            }
        }
        line[len] = '';
        return (len - 1);
    }
     
    int main(){ 
     
        int ans = 0;
        int len1 = get_line(ch1, MAXN);
        int len2 = get_line(ch2, MAXN);
     
        memset(dp, 0, sizeof(dp));
        for(int i=0; i<len1; ++i){
            for(int j=0; j<len2; ++j){
                if(ch1[i] == ch2[j]){
                    dp[i+1][j+1] = max(dp[i+1][j+1], dp[i][j]+1);
                    ans = max(ans, dp[i+1][j+1]);
                }
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
    

      

  • 相关阅读:
    测试开发进阶之路,2020 我们砥砺同行!
    【上海/北京/杭州】七牛云工程效率部直聘
    测试开发基础|一文搞定计算机网络(一)
    点点点工程师真的要被淘汰吗?
    电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测
    将H264与AAC打包Ipad可播放的TS流的总结
    Ubuntu阿里云搭建Mono.net环境
    利用正则表达式排除特定字符串
    你敢不敢不要让我这么忙
    离我而去的附录H
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/7091567.html
Copyright © 2011-2022 走看看