机试_3_数据结构(一)

什么是华为od,od 薪资待遇,od机试题清单,为什么会去华为 OD?华为od怎么刷题?华为OD已经入职的人的真实感受?(最新华为od机试E卷更新中) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷 阅读详情

本章学习基本的线性数据结构,包括向量、队列和栈。这些基础的数据结构是后续很多高级内容的基础。

一、向量

数组作为一种基本的数据类型,它是有限个类型相同的变量的线性集合,组成数组的各个变量称为数组的元素。每个元素对应一个下标,用这个下标指代该元素。同时,还可通过下标直接访问数组中的任何一个元素,并且这些访问能在常数时间内完成。然而,数组存在一个限制,即必须在创建数组时确定其大小。

向量在内部使用动态分配数组的方式来存储元素,会必要时会重新分配数组。重新分配数组就需要将原来的所有元素移动到新数组中,这个操作会比较耗时,因此向量每次重新分配数组时,会多分配一些额外的存储空间,以便适应未来可能的增长。重新分配数组时,数组的大小呈双倍增长,以便在平均意义下,保证能够在常数时间内将新元素插入到向量的末尾。

所以,与数组相比,向量其实是通过消耗更多的内存来换取存储管理效率的。

注:C++内部对向量(vector)进行了封装,在会使用的前提下,有兴趣可以研究一下内部的实现细节。

1、STL-vector

1.1、vector的定义

添加头文件 #include <vector>

定义一个向量 vector<typename> name, 其中typename是向量元素的数据类型,name是向量的名字

1.2、vector的状态

vector中用做判断的状态通常有两个:
1. empty( ): 返回当前向量是否为空
2. size( ): 返回当前向量元素个数

1.3、vector尾部元素的添加和删除

push_back(): 向尾部添加新的元素
pop_back(): 删除尾部的元素

1.4、vector元素的访问

两种访问方式:
1. 数组一般通过元素下标进行访问,下标的区间为[0, size()-1]。
2. 迭代器进行访问,迭代器类似于指针。

1.5、vector元素操作

vector中的常用元素操作包括:
insert(): 在任意位置插入元素
erase(): 在任意位置删除元素
clear(): 将向量清空

1.6、vector迭代器操作

vector中常用的迭代器操作包括:
begin(): 返回向量中的首元素的迭代器
end(): 返回向量中尾元素后一个位置的迭代器

1.7、示例代码

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;


int main() {
    //定义一个向量
    vector<int> myVector;

    for (int i = 0; i < 5; ++i) {
        //在尾部逐一插入元素
        myVector.push_back(i);
    }
    cout << "向量的长度为:" << myVector.size() << endl;

    //在头部插入3个666
    myVector.insert(myVector.begin(), 3, 666);
    //输出向量--数组输出
    for (int j = 0; j < myVector.size(); ++j) {
        cout << myVector[j] << " ";
    }
    cout << endl;
    cout << "向量的长度为:" << myVector.size() << endl;
    //弹出尾部元素
    myVector.pop_back();
    cout << "向量的长度为:" << myVector.size() << endl;
    cout << "第5个元素为:" << myVector[4] << endl;

    //删除索引为5及其后续的元素
    myVector.erase(myVector.begin() + 5, myVector.end());

    //输出向量--迭代器输出
    vector<int>::iterator it;
    for (it = myVector.begin(); it != myVector.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;

    //清空向量
    myVector.clear();
    cout << "向量的长度为:" << myVector.size() << endl;

    return 0;
}
向量的长度为:5
666 666 666 0 1 2 3 4
向量的长度为:8
向量的长度为:7
第5个元素为:1
666 666 666 0 1
向量的长度为:0

2、完数与盈数–清华大学

描述:

一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出2 到60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 …(ei 为完数) G: g1 g2 g3 …(gi 为盈数)

输入描述:

无输入数据

输出描述:

按描述要求输出(注意EG后面的冒号之后有一个空格)。

示例1

输入:

无

输出:

无

题解:

分析:
只要num % i == 0, 则i就是num的一个因子
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

/**
 * 求一个整数的各因子之和
 * @param num
 * @return
 */
int getFactorSum(int num) {
    int sum = 0;
    for (int i = 1; i < num; ++i) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return sum;
}

/**
 * 完数与盈数--清华大学
 * @return
 */
int main() {
    //数目未知,用vector存放
    vector<int> numberE;
    vector<int> numberG;

    for (int i = 2; i <= 60; ++i) {
        int factorSum = getFactorSum(i);
        if (i == factorSum) {
            //完数
            numberE.push_back(i);
        } else if (i < factorSum) {
            //盈数
            numberG.push_back(i);
        }
    }
    //打印完数
    cout << "E:";
    for (int j = 0; j < numberE.size(); ++j) {
        cout << " " << numberE[j];
    }
    cout << " ";
    /*
     * 打印盈数
     * 牛客的oj有问题,很明显2不是盈数,但是牛客oj里面把2判为盈数了
     * 因此,此处手动加上!!!
     * 但是,再次强调,2不是盈数,只是为了通过oj
     */
    numberG.insert(numberG.begin(), 2);
    cout << "G:";
    for (int k = 0; k < numberG.size(); ++k) {
        cout << " " << numberG[k];
    }
    cout << endl;

    return 0;
}

二、队列

队列(Queue)是一种线性的序列结构,其存放的元素按照线性的逻辑次序排列,但队列的操作只限于逻辑上的两端,即新元素只能从队列的一端插入,并且只能从另一端删除已有的元素。

允许队列插入的一端称为队列的尾部,允许队列删除的一端称为队列的头部。因此,对于元素来说,插入与删除就分别称为入队和出队。
队列中各个元素的操作次序必定遵守所谓的先进先出(First–In First-Out,FIFO)规则,即越早入队的元素将会越早出队,而越晚入队的元素将会越晚出队。

注:C++内部对队列(queue)进行了封装,在会使用的前提下,有兴趣可以研究一下内部的实现细节。

1、STL-queue

1.1、queue的定义

添加头文件 #include <queue>

定义一个队列 queue<typename> name, 其中typename是队列元素的数据类型,name是队列的名字

1.2、queue的状态

queue中用做判断的状态通常有两个:
1. empty( ): 返回当前队列是否为空
2. size( ): 返回当前队列元素个数

1.3、queue元素的添加或删除

push(): 在队尾添加新的元素
pop(): 删除队头已有的元素

1.4、queue元素的访问

队列只能对两端进行操作:
front(): 获取队友元素
back(): 获取队尾元素

1.5、示例代码

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <queue>

using namespace std;

queue<int> myQueue;

/**
 * 队列
 * @return
 */
int main() {
    cout << "队列的长度为:" << myQueue.size() << endl;
    //向队尾添加元素
    for (int i = 0; i < 10; ++i) {
        myQueue.push(i);
    }
    cout << "队列的长度为:" << myQueue.size() << endl;

    cout << "队首元素:" << myQueue.front() << endl;
    cout << "队尾元素:" << myQueue.back() << endl;
    //输出队列
    cout << "队列元素为[对头<--队尾]: ";
    while (!myQueue.empty()) {
        cout << myQueue.front() << " ";
        myQueue.pop();
    }
    cout << endl;
    cout << "队列的长度为:" << myQueue.size() << endl;
    return 0;
}
队列的长度为:0
队列的长度为:10
队首元素:0
队尾元素:9
队列元素为[对头<--队尾]: 0 1 2 3 4 5 6 7 8 9
队列的长度为:0

2、猫狗收容所

描述:

有家动物收容所只收留猫和狗,但有特殊的收养规则。收养人有两种收养方式:

  • 第一种为直接收养所有动物中最早进入收容所的。
  • 第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。

给定一个操作序列代表所有事件。

  • 若第一个元素为1,则代表有动物进入收容所。第二个元素为动物的编号,正数代表狗,负数代表猫。
  • 若第一个元素为2,则代表有人收养动物。第二个元素若为0,则采取第一种收养方式;若为1,则指定收养狗:若为-1,则指定收养猫。

请按顺序输出收养动物的序列。
若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。

输入:

第一个是n,它代表操作序列的次数。接下来是n行,每行有两个值m和t,分别代表题目中操作
的两个元素。

输出:

按顺序输出收养动物的序列,编号之间以空格间隔。

示例1:

输入:

6
1 1
1 -1
2 0
1 2
2 -1
2 1

输出:

1 -1 2

题解:

分析:
题目一直强调说收养“最早进入”收养所,这很自然就能联想到利用队列“先进先出”的特性来解题。
所以,我们可以维护一个队列来存放所有动物,这样一来就可以很方便地实现第一种收养方式。但是,对于第二种收养方式就比较麻烦,需要遍历整个队列才知道“最早进入”收养所的猫或者狗。

因此,我们可以维护两个队列,一个存放猫,另一个存放狗,同时对每只动物进入收养所的次序进行标记,这样一来就可以清晰地知道第一只进入收养所的动物。这种做法都可以比较方便地实现第一种收养方式和第二种收养方式。

代码稍微有点长,但是逻辑还是比较清晰的,仔细分析即可。
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <queue>

using namespace std;

struct Animal {
    /**
     * 动物编号
     * 负数表示猫;正数表示狗
     */
    int code;
    /**
     * 次序标志,标记进入收容所的序号
     */
    int order;

    /**
     * 构造函数
     * @param code
     * @param order
     */
    Animal(int code, int order) {
        this->code = code;
        this->order = order;
    }
};

/**
 * 猫狗收容所
 * @return
 */
int main() {
    //存放猫的队列
    queue<Animal> cats;
    //存放狗的队列
    queue<Animal> dogs;
    int n;
    cin >> n;
    /*
     * 事件
     * 1--动物进入收养所-->第二个元素为"动物编号"
     * 2--收养动物-->第二个元素为"收养方式"
     */
    int event;
    //收养方式
    int method;
    //动物编号
    int code;
    //动物次序
    int order = 0;
    //临时存放第二个元素
    int tmp;
    for (int i = 0; i < n; ++i) {
        cin >> event >> tmp;
        if (event == 1) {
            /*
             * 动物进入收养所
             * 第二个元素为"动物编号"
             */
            code = tmp;
            if (code > 0) {
                //动物为狗
                dogs.push(Animal(code, order++));
            } else {
                //动物为猫
                cats.push(Animal(code, order++));
            }

        } else if (event == 2) {
            /*
             * 有人收养动物
             * 第二个元素为"收养方式"
             */
            method = tmp;
            if (method == 0 && !dogs.empty() && !cats.empty()) {
                //第一种收养方式--收养所猫和狗都有--最先进入收养所的动物
                if (dogs.front().order < cats.front().order) {
                    //最先进入是狗
                    cout << dogs.front().code << " ";
                    dogs.pop();
                } else {
                    //最先进入是猫
                    cout << cats.front().code << " ";
                    cats.pop();
                }
            } else if (method == 0 && !dogs.empty() && cats.empty()) {
                //第一种收养方式--收养所只有狗
                cout << dogs.front().code << " ";
                dogs.pop();
            } else if (method == 0 && dogs.empty() && !cats.empty()) {
                //第一种收养方式--收养所只有猫
                cout << cats.front().code << " ";
                cats.pop();
            } else if (method == 1 && !dogs.empty()) {
                //指定收养狗
                cout << dogs.front().code << " ";
                dogs.pop();
            } else if (method == -1 && !cats.empty()) {
                //指定收养猫
                cout << cats.front().code << " ";
                cats.pop();
            }
        }
    }
    cout << endl;
    return 0;
}


3、约瑟夫问题 No.2

描述:

个小孩围坐成一圈,并按顺时针编号为1,2,…,n,从编号为p的小孩顺时针依次报数,由1报到m,报到m时,这名小孩从圈中出去;然后下一名小孩再从1报数,报到m时再出去。
以此类推,直到所有小孩都从圈中出去。

请按出去的先后顺序输出小孩的编号。

输入:

第一个是n,第二个是p,第三个是m (0<m, n<300)。
最后一行是:000。

输出:

按出圈的顺序输出编号,编号之间以逗号间隔。

示例1

输入:

8 3 4
0 0 0

输出:

6,2,7,4,3,5,1,8

题解:

image-20230120205424651
分析:
这道题是著名约瑟夫问题的变体。当约瑟夫问题的数据规模不大时,可以考虑直接利用循环队列进行模拟进行求解。
而queue只是普通的队列,所以我们把queue的队首元素弹出队列后,再次将其压入队列尾部,用queue来模拟循环队列的效果。
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <queue>

using namespace std;

/**
 * 约瑟夫问题 No.2
 * @return
 */
int main() {
    int n;
    int p;
    int m;
    while (cin >> n >> p >> m) {
        if (n == 0 && p == 0 && m == 0) {
            break;
        }
        queue<int> queue;
        for (int i = 1; i <= n; ++i) {
            //依次加入队列
            queue.push(i);
        }
        //定位到p, 将前面的p-1个出队后,再插入队尾
        for (int i = 1; i < p; ++i) {
            queue.push(queue.front());
            queue.pop();
        }

        //开始计数
        while (!queue.empty()) {
            //前面的m-1个出队后,再插入队尾
            for (int i = 1; i < m; ++i) {
                queue.push(queue.front());
                queue.pop();
            }
            if (queue.size() == 1) {
                //最后一个元素要换行
                cout << queue.front() << endl;
            } else {
                //非最后一个元素要输出空格
                cout << queue.front() << " ";
            }
            queue.pop();
        }
    }
    return 0;
}
8 3 4
6 2 7 4 3 5 1 8
8 1 3
3 6 1 5 2 8 4 7
8 2 1
2 3 4 5 6 7 8 1
0 0 0

三、栈

栈(Stack)是一种线性序列结构,其存放的元素也是按照线性逻辑次序排列的。然而,栈的操作仅限于逻辑上特定的一端,即新元素只能从栈的一端插入,也只能从这一端删除已有的元素。

注:禁止操作的一端称为盲端

栈中允许元素插入和删除的一端称为栈顶,禁止操作的盲端就称为栈底。于是,插入元素和删除元素就分别称为入栈和出栈。因此,栈中各个元素的操作次序必定遵守所谓的后进先出(Last-In First–Out, LIFO)规则。

注:C++内部对栈(stack)进行了封装,在会使用的前提下,有兴趣可以研究一下内部的实现细节。

1、STL-stack

1.1、stack的定义

添加头文件 #include <stack>

定义一个栈 stack<typename> name, 其中typename是栈元素的数据类型,name是栈的名字

1.2、stack的状态

stack中用做判断的状态通常有两个:
1. empty( ): 返回当前栈是否为空
2. size( ): 返回当前栈元素个数

1.3、stack元素的添加或删除

push(): 将元素压入栈顶
pop(): 弹出栈顶元素

1.4、stack元素的访问

只能对栈的栈顶一端进行操作,所以只能用top()来访问栈顶元素

注意:队列可以访问队头和队尾,而栈不行。务必注意stack和queue的区别。

1.5、示例代码

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <stack>

using namespace std;

/**
 * 栈
 * @return
 */
int main() {
    stack<int> stack;
    cout << "栈的高度:" << stack.size() << endl;
    for (int i = 0; i < 10; ++i) {
        stack.push(i);
    }
    cout << "栈顶元素:" << stack.top() << endl;
    cout << "栈的高度:" << stack.size() << endl;
    int sum = 0;
    while (!stack.empty()) {
        sum += stack.top();
        stack.pop();
    }
    cout << "sum: " << sum << endl;
    cout << "栈是否为空:";
    if (stack.empty()) {
        cout << "是" << endl;
    } else {
        cout << "否" << endl;

    }

    return 0;
}
栈的高度:0
栈顶元素:9
栈的高度:10
sum: 45
栈是否为空:是

1.6、栈的应用

栈的应用:逆序输出、括号匹配问题、表达式求值


2、Zero-complexity Transposition–上海交通大学

描述:

You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence.

题目大意:给定一个整数序列,序列的零复杂性换位是将序列反转。写一个程序,对这个序列进行零-复杂性换位。

输入:

For each case, the first line of the input file contains one integer n-length of the sequence (0 < n ≤ 10 000). The second line contains n integers numbers-a1, a2, …, an (-1 000 000 000 000 000 ≤ ai ≤ 1 000 000 000 000 000).

输出:

For each case, on the first line of the output file print the sequence in the reverse order.

示例1

输入:

5
-3 4 6 -8 9

输出:

9 -8 6 4 -3

题解:

逆序输出,即先进后出,所以可以很自然联想到"栈".

不过要注意a的取值范围:-1000000000000000 <= a <= 1000000000000000
所以,此题要要用long long类型去接收,因为int会出现溢出。
int最大为214748364
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <stack>

using namespace std;

/**
 * Zero-complexity Transposition--上海交通大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        long long num;
        stack<long long> stack;
        for (int i = 0; i < n; ++i) {
            cin >> num;
            stack.push(num);
        }
        //循环取栈顶元素,即可完成逆序输出
        while (!stack.empty()) {
            if (stack.size() == 1) {
                //最后一个数字换行
                cout << stack.top() << endl;
            } else {
                //非最后一个输出空格
                cout << stack.top() << " ";
            }
            stack.pop();
        }
    }
    return 0;
}

3、括号匹配问题

描述:

在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来的字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用”$”标注,不能匹配的右括号用”?"标注。

输入:

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超计100

输出:

对每组输出数据,输出两行,第一行包含原始输入字符,第二行由”””?”和空格组成,”””?”和空格组成,”””?”和空格组成,””和”?表示与之对应的左括号和右括号不能匹配。

示例1

输入:

)(rttyy())sss)(

输出:

)(rttyy())sss)(
?           ?$

题解:

分析:
结题的关键是:每个右括号必定要与之前未匹的左括号中最靠右的一个进行匹配。
明白这个匹配规则之后,我们只需从左往右


#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <stack>

using namespace std;

/**
 * 括号匹配问题
 * @return
 */
int main() {
    stack<int> stack;
    string str;
    while (cin >> str) {
        int length = str.size();
        //标记字符串
        string flagStr(length, ' ');
        /*
         * 从左往右扫描
         * 1 左括号,直接入栈(注:索引入栈)
         * 2 右括号,弹出栈顶进行匹配
         *  注:因为括号就两种,因此只需检查栈是否为空即可
         *  2.1 若不为空,则匹配成功
         *  2.2 若为空,则匹配失败,标记该右括号(?)
         */
        for (int i = 0; i < length; ++i) {
            if (str[i] == '(') {
                //左括号
                stack.push(i);
            } else if (str[i] == ')') {
                //右括号
                if (!stack.empty()) {
                    //匹配成功
                    stack.pop();
                } else {
                    //标记该索引的右括号
                    flagStr[i] = '?';
                }
            }
        }

        /*
         * 扫描结束后,检查栈是否为空
         * 1 栈为空,则括号匹配成功
         * 2 栈不为空,则标记该左括号($)
         */
        while (!stack.empty()) {
            int index = stack.top();
            flagStr[index] = '$';
            stack.pop();
        }
        //输出原字符串
        cout << str << endl;
        //输出标记字符串
        cout << flagStr << endl;
    }

    return 0;
}
)(rttyy())sss)(
)(rttyy())sss)(
?            ?$

(wew)(dsa)(((ds)()dsd)
(wew)(dsa)(((ds)()dsd)
          $
(s)sss(sss)))))(((()))
()sss(sss)))))(((()))
          ????$

4、简单计算器–浙江大学

描述:

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

输入描述:

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

输出描述:

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

示例1

输入:

1 + 2
4 + 2 * 5 - 7 / 11
0

输出:

3.00
13.36

题解:

此类型的题应该算是比较难的一类题了,如果没有遇到过,自己很难想到方法,但是好在解题套路相对固定。

分析:
概括:中缀表达式求值 = 中缀表达式转后缀表达式 + 后缀表达式求值
我们可以先将中缀表达式转化后缀表达式,再由后缀表达式来求值。

步骤一:中缀表达式转后缀表达式
1. 初始化一个栈,用于暂存不能确定运算顺序的操作符。
2. 从左到右开始扫描,直至末尾,由3种结果。
	2.1 操作数:直接加入后缀表达式。
	2.2 界限符:"(",则直接入栈。
			   ")",弹出栈内的运算符,并加入到后缀表达式中,直至弹出"("。
	    注:")"不加入到后缀表达式中。
	2.3 运算符:依次弹出所有优先级高于或者等于当前运算符的运算符,并将其加入到后缀表达式中。
	    注:若碰到"("或者"栈空"则停止,再将当前运算符入栈。
3. 处理完所有字符,将栈中剩余运算符依次弹出,并加入到后缀表达式中。

步骤二:后缀表达式求值
1. 初始化一个栈,用于暂存操作数。
2. 从左向右扫描元素。
	2.1 扫描到操作数,则入栈。
	注:操作数可能是不止一位,因此要进行判断。
	2.2 扫描到操作符,则执行2。
3. 弹出两个栈顶元素,执行相应运算,再将其结果压入栈中。
	注:先出栈的是"右操作数",注意操作数的顺序。
4. 继续执行2,直至元素全部处理完为止。
5. 栈中有且仅有的唯一元素即为结果。

下述代码分别将"中缀表达式转后缀表达式"、"后缀表达式求值"封装成两个函数。
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <stack>
#include <map>

using namespace std;

/**
 * 中缀表达式转后缀表达式(逆波兰式)
 * @param formula
 * @return
 */
string getRPN(string formula);

/**
 * 后缀表达式求值
 * @param rpnFormula
 * @return
 */
double getRPNRes(string rpnFormula);

/**
 * 计算运算符的操作结果
 * @param opera 运算符
 * @param leftNum 左操作数
 * @param rightNum 右操作数
 * @return
 */
double calculate(char opera, double leftNum, double rightNum);

/**
 * map存放运算符的优先级
 */
map<char, int> priority = {
        {'$', 0},   //结尾符$--1
        {'+', 1},   //加--1
        {'-', 1},   //减--1
        {'*', 2},   //乘--2
        {'/', 2}    //除--2
};

/**
 * 简单计算器--浙江大学
 * @return
 */
int main() {
    string str;
    while (getline(cin, str)) {
        if (str == "0") {
            break;
        }
        //在字符串的结尾添加"$"
        str += "$";
        string formula = getRPN(str);
        double res = getRPNRes(formula);
        printf("%.2f\n",res);
        //cout << formula << endl;
        //cout << res << endl;
    }

    return 0;
}

string getRPN(string formula) {
    stack<char> operaStack;
    string res = "";
    string num = "";
    for (int i = 0; i < formula.size(); ++i) {
        char character = formula[i];
        if (character == '$') {
            //来到最后一个字符$
            //将num加入道后缀表达式中
            res += num;
            res += " ";
            //将字符栈中剩余的运算符加入道后缀表达式中
            while (!operaStack.empty()) {
                res += operaStack.top();
                operaStack.pop();
                res += " ";
            }

        } else if (character == ' ') {
            //空格, 则表示一个单位已经扫描完
            if (num != "") {
                res += num;
                res += " ";
                num = "";
            }
        } else if ('0' <= character && character <= '9' || character == '.') {
            //数字
            num.push_back(character);
        } else if (('a' <= character && character <= 'z') || ('A' <= character && character <= 'Z')) {
            res += character;
            res += " ";
        } else if (character == '(') {
            //"(", 则直接入栈
            operaStack.push(character);
        } else if (character == ')') {
            //")", 则弹出栈内的运算符,并加入到后缀表达式中,直至弹出"("
            while (!operaStack.empty() && operaStack.top() != '(') {
                res += operaStack.top();
                operaStack.pop();
                res += " ";
            }
        } else {
            /*
             * 运算符
             * 依次弹出所有优先级高于或者等于当前运算符的运算符,并将其加入到后缀表达式中。
             */
            while (!operaStack.empty() && priority[operaStack.top()] >= priority[character]) {
                res += operaStack.top();
                operaStack.pop();
                res += " ";
            }
            //当前运算符入栈
            operaStack.push(character);
        }
    }
    return res;
}

double getRPNRes(string formula) {
    stack<double> numStack;
    string num = "";
    for (int i = 0; i < formula.size(); ++i) {
        char character = formula[i];
        if (character == ' ') {
            if (num != "") {
                numStack.push(stod(num));
                num = "";
            }
        } else if ('0' <= character && character <= '9' || character == '.') {
            num.push_back(character);
        } else {
            double rightNum = numStack.top();
            numStack.pop();
            double leftNum = numStack.top();
            numStack.pop();
            numStack.push(calculate(character, leftNum, rightNum));
        }
    }

    if (numStack.size() == 1) {
        return numStack.top();
    } else {
        return -1;
    }
}

double calculate(char opera, double leftNum, double rightNum) {
    double res = 0;
    switch (opera) {
        case '+':
            res = leftNum + rightNum;
            break;
        case '-':
            res = leftNum - rightNum;
            break;
        case '*':
            res = leftNum * rightNum;
            break;
        case '/':
            res = leftNum / rightNum;
            break;
        default:
            break;
    }
    return res;
}


什么是华为od,od 薪资待遇,od机试题清单,为什么会去华为 OD?华为od怎么刷题?(2024最新华为od机试E卷刷题建议,目前已收录590道) 什么是华为od,od 薪资待遇,od机试题清单,为什么会去华为 OD?华为od怎么刷题?(2024最新华为od机试E卷刷题建议,目前已收录590道) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od 阅读详情

相关推荐

什么是华为OD?怎么才能通过华为OD机试?华为OD机试怎么刷题?(2024最新华为OD机试E卷更新中)

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 11万+

验证栈序列

题目描述 对一个空栈进行 push 和 pop 操作各 n 次,使得 1-n 每个数都被 push 和 pop 一次,n 次 push 的数按照顺序形成排列 A,n 次 pop 的数按照顺序形成排列 B,此时称 A 和 B 互为“栈转化序列”。 input 6 1 2 3 4 5 6 5 6 4 3 2 1 output True explanation push(1),push(2),push(3),push(4), push(5),pop(5), push(6),pop(6), pop(4),pop

埃利安里的博客 363

数据结构上机考试题目和代码

南航数据结构上机考试题目和所有题目代码。

数组实现栈的基本操作

public class arrayStack{ private long[] a; private int size; private int top; public arrayStack(int maxSize){ this.size = maxSize; this.a = new long[size]; this.top = -1; // 代表空栈 } public void ...

独一无二 938

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 940

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6586

数据结构 第三章 栈和队列 作业(已批改)

判断题 1-1 若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1。 T F 栈是一种先进后出的数据结构,也就是说如果入栈顺序为123,那么出栈顺序则为321。题目中栈的输入序列为1,2,3,...,n,该序列是等差为1的递增序列,那么出栈顺序应该为n,n-1...,3,2,1,也就是等差为1的递减序列。那么当输出序列的第一个元素为i时,...

Jessieeeeeee的博客 9574

【扫地机器人】详细介绍扫地机器人软硬件测试和场景化测试

本文提出2025版扫地机器人全生命周期测试方案,涵盖实验室仿真、硬件台架、客户实景等全流程验证。测试以"清洁率≥95%、覆盖率≥98%、MTBF≥1000h"为核心指标,采用数字孪生与120套真实场景结合的双V模型。重点包括:传感器精度(LDS误差<±10mm)、清洁系统性能(10g粉尘吸入率≥99%)、动力续航(800次循环容量保持≥80%)等硬件测试;以及SLAM重定位(误差<5cm)、AI识别(mAP>92%)等软件验证。方案特别针对宠物家庭(毛发缠绕率≤3%)、

2501_92897788的博客 2283

数据结构机试练习

问题 A: 谁是你的潜在朋友 时间限制: 1 Sec 内存限制: 32 MB 题目描述 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会 并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,...

qq_30983445的博客 447

基于NXP1778的CAN自动波特率检测

一、概念 NXP1778芯片内部自带一个CAN控制器。CAN模块由两部分组成:控制器和验收滤波器。所有的寄存器和RAM都以32位字宽度来访问。 CAN自动波特率检测主要用于以一种CAN的转换的产品中。产品中CAN部分的波特率以前都是通过网页中修改然后配置下去的,依据实际情况的考虑,如果CAN部分的波特率能够根据客户设备的改变而自动改变,将会增加其灵活性。   二、原理 根据CAN控制器的

菜鸟的痕迹专栏 5271

60、拓扑码:从理论到应用

本博客深入探讨了拓扑码的基本理论、构造方法及其在量子计算中的应用。重点介绍了颜色码的拓扑起源、编码量子比特的计算方法、弦算子的构造与性质、边界条件的影响、同调描述以及与统计模型相关的错误阈值分析。同时,还涵盖了拓扑码的历史发展、与其他拓扑码的关系、与凝聚态系统的联系,以及其在激发态和高维中的表现。博客展示了拓扑码在容错量子计算和未来量子信息领域的广阔前景。

o1p2q3r的博客 129

大胆预测一下《数据结构》期末机考题

写在前面 时间回到2021年12月份,突如其来的期末考试打的我们猝不及防,相信也给期末出卷老师带来了不小的压力,再加上20级是如此的特殊以及优秀,所以此次数据结构机考变成了闭卷。但天无绝人之路,闭卷的同时也意味着难度可能有所降低,参考往年的机考题,现大胆进行一波预测。(纯属个人臆想,什么都会的大佬请跳过) 还有本次软工是五个题目做出三个满分,分为函数题以及编程题。且根据老师的回答,函数题占大多数,可以想到函数题大概是有三个。但我个人感觉函数题比自己完整写一道题目更难,因为所要编写的函数要满足题目片段各种奇奇

西电卢本伟的博客 4460

硬件工程师笔记——运算放大电路Multisim电路仿真实验汇总

本文系统介绍了运算放大电路的基础知识及其应用。主要内容包括:1)运算放大器的基本结构、理想特性及分析方法(虚短、虚断、叠加定理);2)比例运算电路(同向、反向、差分)的工作原理与仿真分析;3)求和运算、加减运算电路的实现方法;4)积分、微分、指数和对数运算电路的基本原理;5)过零电压比较器的功能特点。通过理论分析和仿真实验,详细阐述了各类运算放大电路的输入输出特性、相位关系和增益计算,为硬件工程师提供了实用的电路设计参考。

XU157303764的博客 2479

机试_3_数据结构(一)_习题

学习完之后,当然要做相应地练习啦~注:上述习题都可以在牛客进行测试。,其他题目在“题目列表”中基本都可以找到。另外,此文章仅仅是提供解题思路,并非最优解。

Window_mouse的博客 1174

24、语料库与科技术语库建设

本文探讨了语料库在科技术语库建设中的关键作用,重点分析了词性标注、索引、搭配、词形还原、频率计数、词汇排序和类型-标记分析等核心技术的应用与挑战。文章以印度语言为例,指出其语料库处理工具匮乏的现状,强调需开发适配本地语言特征的技术,并提出一个整合多种处理步骤的综合流程,旨在推动印度语言科技术语数据库的系统化建设,促进科技语言的发展与应用。

cola5的博客 91

干掉百度Apollo的安装!(Apollo10.0的源码安装)

1、在Apollo10.0的安装手册中,没有再详细给出源码安装的步骤,官方更推荐的是包管理安装,但实际上Apollo10.0仍然是可以进行源码安装的。2、使用源码安装Apollo10.0,比Apollo9.0的源码安装问题要少,整个安装过程更顺畅。3、从Apollo 10.0开始,源码安装和包管理安装采用同一套编译工具,也就是aem。之前只有在进行包管理安装的时候我们才需要安装aem,现在进行源码安装也需要安装aem。

qq_40033030的博客 892

华为od机试E卷刷题建议

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷

KJ.JK 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

2025最新华为OD机试,华为OD机试备考攻略,独家整理总结上岸技巧

很多人想重试本地部署DeepSeek,对接DeepSeek api,对于大多数小伙伴而言,门槛还是过高,即使部署成功,也会因为电脑配置等原因,只能部署 7B、8B 的版本,不是满血版的 671B 的 deepseek,体验不佳。4、 编码工具删除行 ctrl+d依旧可以使用,ctrl+c,+v ,+z 等均可正常使用,其他快捷键建议尽量莫用,尤其是有保存习惯的同学,不要用ctrl+s,否则会打开页面保存键,算弹出当前页面一次。如果需要上厕所,请在考试前提前准备好,避免考试中途离开座位,出现离开监控的情况。

学Java,找哪吒 7904

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新华为od机试E卷刷题建议

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 6万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【华为OD机试】答疑 + 注意事项

【华为OD机试】答疑 + 注意事项

MISAYAONE的博客 8万+

2024最新华为od机试E卷刷题建议

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为

KJ.JK 2万+

计算机考研机试攻略 - 高分篇

目录 第一章 从零开始 1.1机试分析 1.2 IDE的选择与评测结果 1.3 DreamJudge的使用 1.4输入输出技巧 1.5头文件技巧 1.6数组使用技巧 1.7审时度势 — 复杂度与是否可做 1.8 C++ STL的使用 1.9多组输入的问题 第二章 入门经典 2.1 简单模拟 2.2 进制转换类问题 2.3 排版类问题 2.4 日期类问题 2.5 ...

1万+

机试能力很差怎么办?哪些学校cs夏令营没有机试?

此外,面试组老师也是会关注机试成绩的,如果机试分数较低,在面试时很可能针对这一点被发问,需要提前做好答复准备。此外,在夏令营机试考核中,对字符串处理(字符串匹配、词频统计等)、搜索算法(DFS/BFS)、列表队列处理(增删查改)的考察较频繁,也需要多做准备。进入考场后首先要检查自己的设备硬件(键鼠等)是否正常,然后试着调试IDE,看看常见的代码提示、括号匹配、断点调试是否正常、编译器能否更换为自己常用的等等。其次,要学会读别人的代码,学习他人更简洁有效的思路,并试着举一反三,从而更快成长。

Baoyan_cs的博客 2391

2025A卷最新华为OD机试,独家整理总结上岸技巧,华为OD机试备考攻略

2025A卷最新华为OD机试,独家整理总结上岸技巧,华为OD机试备考攻略 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试202

KJ.JK 2459

2024最新华为OD机试,题库清单(按算法分类),高效刷题,举一反三,玩转OD

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 7834

【华为机试】死记硬背没思路?一般人我劝你还是算了吧

华为机试有三道题,第一道和第二道属于简单题,分值为100分,第三道为困难题,分值为200分,总分400分,150分钟考试时间

学Java,找哪吒 1万+
上一篇: 机试_2_排序与查找_习题
下一篇: 机试_4_数学问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值