说实话秋招还没准备好,没敢投网易,但是做了一下今天的模拟题。通过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;
}