banner
cos

cos

愿热情永存,愿热爱不灭,愿生活无憾
github
tg_channel
bilibili

2022年春季360筆試題目複盤-研發E卷

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;
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。