9.18 网易互联网编程4道题(CPP版本)

今天有点累了,做了一个小时就溜了,最近心力憔悴,还好有点收获了。

1.找多少位能整除自己(100%)
#include <bits/stdc++.h>

using namespace std;

int main () {
    long long n;
    cin >> n;
    int ret = 0;
    long long temp = n;
    while (temp) {
        int cur = temp % 10;
        temp /= 10;
        if (cur > 0 && n % cur == 0) ret++;
    }
    cout << ret << endl;
    return 0;
}

2.特制键盘打字多少操作完成(63.64%)
#include <bits/stdc++.h>

using namespace std;

int main () {
    string S;
    cin >> S;
    int m;
    cin >> m;
    int X = S.size(); //首先每个键都要被按
    //间隔大于1才考虑魔法,最后m步不考虑魔法
    vector<int> move;//存放移动距离数据
    for (int i = 0; i < S.size() - 1; i++) {
        move.push_back(min((S[i + 1] + 26 - S[i]) % 26, (S[i] + 26 - S[i + 1]) % 26));//相邻最短移动距离
    }
    for (int i = 0; i < move.size(); i++) {
        if (m > 0 && i + m < move.size()) {
            if (move[i] > 1) {
                X += m;
                i = i + m - 1;
            }
        } else {
            //没有机会跳动了
            X += move[i];
        }
    }
    cout << X << endl;
    return 0;
}

3.用最少的2的幂构成一个数(100%)
#include <bits/stdc++.h>

using namespace std;

int main () {
    int one = 0;
    int zero = 0;
    long long n;
    cin >> n;
    if (n == 0) {
        cout << "-1" << endl;
        return 0;
    }
    string s;
    while (n) {
        if (n % 2) {
            s = '1' + s;
        } else {
            s = '0' + s;
        }
        n /= 2;
    }
    //直接看1的数量
    for (const auto& c : s) if (c == '1') one++;
    //先减1,再看0的数量,最多缩一位,就不看第一位就行了
    for (int i = s.size() - 1; i >= 0; i--) {
        if (s[i] == '1') {
            s[i] = '0';
            break;
        } else {
            s[i] = '1';
        }
    }
    for (int i = 1; i < s.size(); i++) if (s[i] == '0') zero++;
    cout << min(one, 1 + zero) << endl;
    return 0;
}
4.累了,没看了


#网易##笔经#
全部评论
楼主收到面试通知了吗
点赞 回复
分享
发布于 2021-09-24 10:14

相关推荐

2 2 评论
分享
牛客网
牛客企业服务