为什么我的矢量“折叠”算法无法正常工作?

问题描述 投票:0回答:1

首先,这是我的代码:

#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

int main() {
    vector<int> vector1;
    vector<int> nr_notate_separat;
    int n;
    int nr;

    cin>>n;

    for(int i = 0; i < n; i++)
    {
        cin>>nr;
        vector1.push_back(nr);
    }

    while(vector1.size() > 1)
    {
        if(vector1.size() % 2 == 1)
        {
                nr_notate_separat.push_back(vector1[vector1.size() - 1]);
                vector1.pop_back();
        }

        vector<int> vector2;

        for(int i = 0; i < vector1.size() / 2; i++)
            {
                    vector2.push_back(vector1[i] + vector1[vector1.size() - 1 - i]);
            }

        vector1 = vector2;
    }

    nr_notate_separat.push_back(vector1[0]);

    for(int i = 0; i < nr_notate_separat.size(); i++)
    {
        cout<<nr_notate_separat[i]<<endl;
    }


    return 0;

}

我目前正在解决向量问题,以下是信息:

要求:
我们有一个包含 n 个自然数的向量。我们将多次应用折叠操作,直到达到由单个元素组成的向量(在应用该操作时,向量会发生变化,并且以下应用是在修改后的向量上进行的)。 在折叠时,最后一个元素与第一个元素重叠,倒数第二个元素与第二个元素重叠,倒数第二个元素与第三个元素重叠,依此类推。如果“n”为奇数,则最后一个元素无法折叠,因此将其单独提取并记录。新向量将有 n/2 个项,每个项等于折叠后相互到达的两项之和。 在新获得的向量上,应用新的折叠操作,依此类推,直到我们到达由单个元素组成的向量,该元素不能再折叠,但会单独注明。 确定单独表示的数字。

示例:

输入:
11、
2 3 4 7 5 6 2 1 9 4 6.

输出:
6 13 30

说明:

初始向量的元素个数为奇数,因此中间的$6$将单独写入。
折叠后,新的向量为: 8 7 13 8 7
这个向量也有奇数个元素,所以$13$单独写。
折叠后我们得到向量 15 15。
它有偶数个元素,所以我们不单独写任何东西,折叠后我们得到向量:$30$。这个数字单独记下来,我们就停下来了。

问题:

当我运行代码时,我得到输出:'6, 11, 32'

重要提示:问题是罗马尼亚语的,所以我把它翻译成英语,所以有些部分可能没有意义。

我什至尝试过ChatGPT,他也无法正确编写程序!

c++ algorithm for-loop vector while-loop
1个回答
0
投票

当循环检测到

vector1
具有奇数大小时,它会注意到并弹出向量的 last 元素。 但是,您应该注意并弹出 middle 元素。

© www.soinside.com 2019 - 2024. All rights reserved.