zoukankan      html  css  js  c++  java
  • 北京理工大学复试上机--2020

    PS: 2020的是夏令营试题

    1、题目:给你一个 m*n 大小的矩阵,每个点有 0,1,2 三种取值;0 代表障碍物,1代表白纸,2 代表墨滴。每一秒墨滴可以向其上下左右扩散,将四周的白纸染色,被染色之后的白纸可以继续向四周扩散,以此类推。问经过几秒,矩阵中所有的白纸都被染色。
    如果可以,则输出扩散时间;
    如果不可以,则输出FALSE。
    输入: m n 的大小以及矩阵每个点的值
    输出: 扩散时间 或 FALSE
    例如:
    3 3
    0 1 0
    1 2 1
    0 1 0
    输出: 1

    3 3
    0 1 0
    1 2 1
    0 1 1
    输出: 2

    2 3
    1 0 0
    0 0 2
    输出: False

    #include <iostream>
    #include <queue>
    using namespace std;
    int main() {
        int m, n;
        while (cin >> m >> n) {
            int arr[m][n];
            int temp = 0;
            queue<int> qx, qy;
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    cin >> arr[i][j];
                    if(arr[i][j] == 2) {
                        qx.push(i);
                        qy.push(j);
                    }
                    if(arr[i][j] == 1) temp++;
                }
            }
            int sec = 0;
            while(!qx.empty() && temp) {
                int size = qx.size();
                int dir[5] = {1, 0, -1, 0, 1};
                while(size--) {
                    int x = qx.front();
                    int y = qy.front();
                    qx.pop();
                    qy.pop();
                    for(int i = 0; i < 4; i++) {
                        int dx = x + dir[i];
                        int dy = y + dir[i + 1];
                        if(dx < 0 || dx >= m || dy < 0 || dy >= n || arr[dx][dy] != 1) continue;
                        else {
                            arr[dx][dy] = 2;
                            temp--;
                            qx.push(dx);
                            qy.push(dy);
                        }
                    }
                }
                sec++;
            }
            if (temp) cout << "False" << endl;
            else cout << sec << endl;
        }
        return 0;
    }
    

    2、输入三个字符串,问第三个字符串能否由前两个字符串多次重复组合形成。如果能,则输出前两个字符串各自的使用次数;如果不能,则输出 FALSE。
    输入:三个字符串
    输出:前两个字符串各自的次数 或 FALSE
    输入: aa bb bbaaaabbaa
    输出: 3 2
    输入: ab ba abbaaabaab
    输出: FALSE
    (注意特殊用例: aa aab aabaa 故递归)

    #include <iostream>
    using namespace std;
    int cnt1 = 0, cnt2 = 0;
    int flag[2][2];
    
    bool sub(string s1, string s) {
        return s.substr(0, s1.length()) == s1;
    }
    
    bool dfsSub(string s1, string s2, string s, int p, int rem) {
        if(rem == s1.length() || rem == s2.length()) {
            if(sub(s1, s.substr(p, rem))) {
                cnt1++;
                return true;
            }
            if(sub(s2, s.substr(p, rem))) {
                cnt2++;
                return true;
            }
            return false;
        }
        if(sub(s1, s.substr(p, rem)) && sub(s2, s.substr(p, rem))) {
            cnt1++;
            p += s1.length();
            rem -= s1.length();
            if(dfsSub(s1, s2, s, p, rem)) return true;
            else {
                p -= s1.length();
                rem += s1.length();
                cnt1--;
                cnt2++;
                p += s2.length();
                rem -= s2.length();
                if(dfsSub(s1, s2, s, p, rem)) return true;
                else {
                    cnt2--;
                    return false;
                }
            }
        }
        else if(sub(s1, s.substr(p, rem))) {
            cnt1++;
            p += s1.length();
            rem -= s1.length();
            return dfsSub(s1, s2, s, p, rem);
        }
        else if(sub(s2, s.substr(p, rem))) {
            cnt2++;
            p += s2.length();
            rem -= s2.length();
            return dfsSub(s1, s2, s, p, rem);
        }
        else return false;
    }
    
    
    int main() {
        string s, s1, s2;
        while(cin >> s1 >> s2 >> s) {
            int l = s.length();
            if(dfsSub(s1, s2, s, 0, l)) {
                cout << cnt1 << "  " << cnt2 << endl;
            }
            else cout << "FALSE" << endl;
            cnt1 = 0;
            cnt2 = 0;
        }
        return 0;
    }
    

    PS: 暂时是更新完了,综合面试也是一个大头,都抓紧吧,尽量不手生,多看 多练 加油!!!! Fighting!!! (别忘了前面未完善的!!)

  • 相关阅读:
    javascript功能插件大集合
    基于Swiper插件的简单轮播图的实现
    LeetCode24. 两两交换链表中的节点
    530. 二叉搜索树的最小绝对差
    416. 分割等和子集
    GAN ——Generative Adversarial Network 理解与推导(一)
    面试题 02.08. 环路检测(返回环路开头节点)
    141.环形链表-LeetCode
    357. 计算各个位数不同的数字个数 ——LeetCode
    LSTM的理解
  • 原文地址:https://www.cnblogs.com/ache/p/12630070.html
Copyright © 2011-2022 走看看