8/4 網易互娛模擬筆試-2019年秋招


說實話秋招還沒准備好,沒敢投網易,但是做了一下今天的模擬題。通過2.5/3吧!
(網易也就是模擬題才會這么簡單吧😂)
第一題: 根據新稅法給定多組輸入,計算每個月收入應該交的稅。
思路:就根據不同收入級別從高往低累計就可以啦。
#include <iostream>
using namespace std;
#define Round(x) int(x+0.5)

int main()
{
    int t, n;
    cin >> t;
    while (t--)
    {
        cin >> n;
        n -= 5000;
        double sum = 0;
        if (n > 80000) {
            sum += (n - 80000)*0.45;
            n = 80000;
        }
        if (n > 55000) {
            sum += (n - 55000)*0.35;
            n = 55000;
        }
        if (n > 35000) {
            sum += (n - 35000)*0.3;
            n = 35000;
        }
        if (n > 25000) {
            sum += (n - 25000) * 0.25;
            n = 25000;
        }
        if (n > 12000) {
            sum += (n - 12000)*0.2;
            n = 12000;
        }
        if (n > 3000) {
            sum += (n - 3000)*0.1;
            n = 3000;
        }
        if (n > 0) {
            sum += n * 0.03;
        }
        cout << Round(sum) << endl;
        sum = 0;
    }
    return 0;
}
第二題:重構字符串,把連續的四個以上的串如CDEF轉換成C-F的形式
思路:就遍歷一遍字符串,定兩個錨點,第一個指向當前元素,另一個向后掃描一下,做下判斷就好啦。
#include <iostream>
#include <string>
using namespace std;

string format(string &str)
{
    int len = str.length();
    if (len <= 1)
        return str;
    string res = "";
    int i = 0;
    while (i < len)
    {
        int j = i + 1;
        while (j < len && (str[j] - str[j - 1] == 1)) {
            j++;
        }
        if (j - i >= 4)
        {
            res += str[i];
            res += '-';
            res += str[j-1];
            i = j;
        }
        else
        {
            for (int k = i; k < j; k++)
                res += str[k];
            i = j;
        }
    }
    return res;
}

int main()
{
    int t;
    cin >> t;
    string str;
    while (t--)
    {
        cin >> str;
        cout << format(str) << endl;
    }
    return 0;
}
第三題:給定多組輸入,每組是一個x, y 和一個字符串,x和y表示兩種進制,字符串是某個數的兩種進制串的連接,求出每組輸入的那個數字(十進制)。
思路:從后往前將字符串截斷,分成兩部分,分別按照兩種進制計算兩部分的值,如果相等(找到了),返回該值。
(這個題沒有全部通過在意料之中,復雜度O(n2) )
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int process(int x, int y, string &str)
{
    int len = str.length();
    if (len <= 0)
        return 0;
    unsigned int sum1 = 0, sum2 = 0;
    for (int i = len - 1; i >= 0; i--)
    {
        //前半部分
        for (int j = i; j >= 0; j--)
        {
            int number = (str[j] >= 'A' && str[j] <= 'F') ? int(str[j] - 'A' + 10) : int(str[j] - '0');
            sum1 += number * pow(x, i - j);
        }
        for (int k = len - 1; k > i; k--)
        {
            int number = (str[k] >= 'A' && str[k] <= 'F') ? int(str[k] - 'A' + 10) : int(str[k] - '0');
            sum2 += number * pow(y, len - 1 - k);
        }
        if (sum1 == sum2)
            return sum1;
        sum1 = 0; sum2 = 0;
    }
    return 0;
}

int main()
{
    int t, x, y;
    cin >> t;
    string str;
    while (t--)
    {
        cin >> x >> y >> str;
        cout << process(x, y, str) << endl;
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM