华为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卷答案

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务