gpt4 book ai didi

c++ - c++双向链表的相反元素的成对乘法

转载 作者:行者123 更新时间:2023-11-28 04:52:17 26 4
gpt4 key购买 nike

我被赋予了以下任务:对于给定的实数双链表,你必须将列表的相反元素相乘(第一个与最后一个,第二个与最后一个减一,等等)并添加此产品添加到新列表中。即:我们有那个列表:

1.1 2.2 3.3 4.4 5.5 

然后我们打印

1.1 * 5.5 = 6.05; 
2.2 * 4.4 = 9.68;
3.3 * 3.3 = 10.89;

最后的名单是:

6.05 9.68 10.89 

我提出了以下朴素的算法:

#include <iostream>
#include <list>

using namespace std;

int main() {
double x = 0;
double q = 0; //for the product of the elements
list <double> user_values, calculated_products;

//data entry
while ( cin >> x) {
user_values.push_back(x);
if (cin.get() == '\n') break;
}

//pairwise multiplication of the opposite elements (х1 * хn; x2 * xn-1; etc.):
for (auto p = user_values.begin(); p!=(user_values.end()); ++p){
cout << (*p) << " * " << (*user_values.rbegin()) << " = " ;
q = (*p) * (*user_values.rbegin()); //result of the multiplication
cout << q << "; " << endl;
calculated_products.push_back(q); //saving result to the new list
user_values.pop_back(); //removing the last element of the list, in order to iterate backwards. This is probably the most confusing part.
}

//result output:
cout << "we have such list of products: " << endl;
for (const auto& t: calculated_products){
cout << t << " ";
}
cout << endl;
return 0;
}

由于向后遍历列表的元素是有问题的,所以我只找到了删除列表最后一个元素的选项。

所以我想知道是否有人可以为此提出更优雅的算法,或者至少改进上面的算法。

最佳答案

您可以使用 rbegin() 来回迭代:

auto i1 = user_values.begin();
auto i2 = user_values.rbegin();
double bufResult = 0; //for the product of the elements

for(int i=0; i<user_values.size()/2; i++)
{
bufResult = (*i1) * (*i2); //result of the multiplication
cout << (*i1) << " * " << (*i2) << " = " << bufResult << "; " << endl;
calculated_products.push_back(bufResult); //saving result to the new list
i1++;
i2++;
}

关于c++ - c++双向链表的相反元素的成对乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47901256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com