首先,这是我的代码:
#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,他也无法正确编写程序!
当循环检测到
vector1
具有奇数大小时,它会注意到并弹出向量的 last 元素。 但是,您应该注意并弹出 middle 元素。