2022春暑期实习-360前端-笔试(AK)

360笔试题目复盘-研发E卷,前端开发的笔试题,包括选择题30道与两道编程

选择题(30道)

啥都考,巴拉巴拉巴拉的,数据库啊高数啊方程啊,后半段前端题居多。

编程题-1 强密码验证(简易)

要求大致为

  • 密码长度为8以上

  • 必须包含数字、大写字母、小写字母和特殊符号(缺一不可)

输入样例

12_Aaqq12
Password123
PASSWORD_123
PaSS^word
12_Aaqq

输出样例

Ok
Irregular password
Irregular password
Irregular password
Irregular password

思路

js的话写个正则就好了,但是我正则玩不溜qwq 只能遍历一遍判断了,也没啥问题一遍过,非常的简单粗暴啊(小孩子不要学)

代码

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
string str;
bool judge(string s) {
    int len = s.length();
    if(len < 8) return false;
    bool flag[4];   // 有数字 
    memset(flag, false, sizeof(flag));
    int cnt = 0;
    for(int i = 0; i < len; ++i) {
        if(s[i] >= 'A' && s[i] <= 'Z') {
            if(!flag[0]) {
                flag[0] = true;
                ++cnt;
            }
        } else if(s[i] >= 'a' && s[i] <= 'z') {
            if(!flag[1]) {
                flag[1] = true;
                ++cnt;
            }
        } else if(s[i] >= '0' && s[i] <= '9') {
            if(!flag[2]) {
                flag[2] = true;
                ++cnt;
            }
        } else if(!flag[3]) {   // 特殊字符
            flag[3] = true;
            ++cnt;
        }
        if(cnt == 4) return true;
    }
    return false;
}
int main() {
    while(cin >> str) {
        if(judge(str)) cout << "Ok" << endl;
        else cout << "Irregular password" << endl;
    }
    return 0;
}

编程题-2 堆积货物(Web)

大意就是,原有RCL的货物堆成一个长方体,被小偷偷成了(R-2)(C-1)(L-2)的长方体。 通过现在的货物总数。算出最坏情况下被偷了多少的货物,输出这个最坏的值。

输入描述 输入为一个数n,表示题面中的(R-2)(C-1)(L-2)

输出描述 输出为一个数,表示最坏情况下被偷了多少的货物

样例输入

4

样例输出

41

提示 对于100%的数据:1 ≤ n ≤ 10^9 样例解释:R=3,C=5,L=3, 3*5 * 3-(3-2)*(5-1)*(3-2)=41

分析

3 2 3 = 18 1 1 1 = 1 偷走了17 4 2 5 = 40 2 1 3 = 6 偷走了34

偷走三个长方体 偷走体积为1*(R+2)*(L+2)+ 2*R*C +2*(R+2)*C (估计是可以用数学推出来的,不过我暴力然后剪枝之后也ac100%了) 俺的暴力解法:设r、l、c分别为偷走后的长宽高,R = r+2, L = l+2, C = c+1,易知rcl肯定都为n的因数,将n分解质因数后把所有质因数存在m中,遍历m取得每个r、l、c,中途再剪剪枝,当前两个数乘起来已经大于n了的时候就跳过。

代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
int n;
ll ans;
vector<ll> m;
int main() {
    cin >> n;
    int k = sqrt(n);
    for(int i = 1; i <= k; ++i) {  
        if(n % i == 0) {
            m.push_back(i);
            m.push_back(n/i);
        }
    }
    sort(m.begin(), m.end());
    int len = m.size();
    for(int r = 0; r < len; ++r) {
        for(int l = 0; l < len; ++l) {
            ll t = m[r]*m[l];
            if(t > n) continue; // 剪枝
            for(int c = 0; c < len; ++c) {
                ll nown = t*m[c];
                if(nown != n) continue;
                ll R = m[r]+2;
                ll L = m[l]+1;
                ll C = m[c]+2;
                ll stole = ll(R*L*C) - nown;
                ans = max(ans, stole);
            }
        }
    }
    cout << ans << endl;
    return 0;
}

最后更新于