华为OD机试- 空栈压数-2024年OD统一考试(E卷)

C++代码

//模仿stack 先进后出
void Push(std::vector<int>& vect, int num)
{
    if (vect.empty())
    {
        vect.push_back(num);
        return;
    }
    int end = vect[vect.size() - 1];
    if (end == num)
    {
        vect.erase(std::next(vect.end(),-1));
        Push(vect, num * 2);
    }
    else
    {
        if (vect.size() == 1)
        {
            vect.push_back(num);
            return;
        }
        if (vect.size() > 1)
        {
            int sum = 0; 
            int i = vect.size() - 1;
            for (; i >= 0; i--)
            {
                sum = sum + vect[i];
                if (sum == num)
                    break;
            }
            if (i == -1)
            {
                vect.push_back(num);
                return;
            }
            else
            {
                int forNum = vect.size() - i;
                for (int k = 1; k <= forNum; k++)
                {
                    vect.erase(std::next(vect.end(), -1));
                }
                Push(vect, num * 2);
            }
        }
    }
}

void StackNum(std::vector<int>& vect)
{
    std::vector<int> stk;
    for (int i : vect)
    {
        Push(stk, i);
    }
    std::reverse(stk.begin(), stk.end());
    for (int i : stk)
    {
        std::cout << i << std::endl;
    }
}
void main()
{
    std::vector<int> vect{ 5,10,20,50,85,1 };
    //StackNum(vect);

    //Test();
}

void Test()
{
    std::cout << "---------test1-------------" << std::endl;

    //test1
    std::vector<int> vect1{ 80,80,160 };
    std::vector<int> stk1;
    for (int i : vect1)
    {
        Push(stk1, i);
    }
    std::reverse(stk1.begin(), stk1.end());
    for (int i : stk1)
    {
        std::cout << i << std::endl;
    }

    std::cout << "---------test2-------------" << std::endl;
    //test2
    std::vector<int> vect2{ 1,2,4,4,6 };
    std::vector<int> stk2;
    for (int i : vect2)
    {
        Push(stk2, i);
    }
    std::reverse(stk2.begin(), stk2.end());
    for (int i : stk2)
    {
        std::cout << i << std::endl;
    }


    std::cout << "---------test3-------------" << std::endl;
    //test3
    std::vector<int> vect3{ 1,3,10,20,50,80,1,1 };
    std::vector<int> stk3;
    for (int i : vect3)
    {
        Push(stk3, i);
    }
    std::reverse(stk3.begin(), stk3.end());
    for (int i : stk3)
    {
        std::cout << i << std::endl;
    }

    std::cout << "---------test4-------------" << std::endl;
    //test4
    std::vector<int> vect4{ 10,20,50,80,1,1 };
    std::vector<int> stk4;
    for (int i : vect4)
    {
        Push(stk4, i);
    }
    std::reverse(stk4.begin(), stk4.end());
    for (int i : stk4)
    {
        std::cout << i << std::endl;
    }

    std::cout << "---------test5-------------" << std::endl;
    //test5
    std::vector<int> vect5{ 5,10,20,50,85,1 };
    std::vector<int> stk5;
    for (int i : vect5)
    {
        Push(stk5, i);
    }
    std::reverse(stk5.begin(), stk5.end());
    for (int i : stk5)
    {
        std::cout << i << std::endl;
    }
}

结果截图

华为OD2024 E 文章被收录于专栏

实时更新华为2024 E卷答案

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4378次浏览 77人参与
# AI面会问哪些问题? #
28219次浏览 565人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15380次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
20378次浏览 343人参与
# 找AI工作可以去哪些公司? #
9351次浏览 247人参与
# 春招至今,你的战绩如何? #
66175次浏览 584人参与
# 米连集团26产品管培生项目 #
13395次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
9172次浏览 321人参与
# 中国电信笔试 #
32068次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34279次浏览 245人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340960次浏览 2175人参与
# 哪些公司真双非友好? #
69694次浏览 289人参与
# 阿里笔试 #
179001次浏览 1318人参与
# 机械人避雷的岗位/公司 #
62708次浏览 393人参与
# 小马智行求职进展汇总 #
25139次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14875次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22226次浏览 284人参与
# 担心入职之后被发现很菜怎么办 #
291382次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26274次浏览 310人参与
# 应届生第一份工资要多少合适 #
20694次浏览 86人参与
# HR最不可信的一句话是__ #
6346次浏览 114人参与
# 沪漂/北漂你觉得哪个更苦? #
10029次浏览 194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务