所以我写了一个小程序来计算 A[0]*B[0] - A[1]*B[1] - A[2]*B[2] - ... - A [n-1]*B[n-1]
使用 vector 。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
double CalcProduct(vector<double> v1,vector<double> v2){
size_t size; int i = 0;
vector<double> product;
double input, input2;
cout << "Enter vector size: ";
cin >> size;
cout << "Enter values for first vector: ";
while (i++ != size) {
cin >> input;
v1.push_back(input);
}
i = 0;
cout << "Enter values for second vector: ";
while (i++ != size) {
cin >> input2;
v2.push_back(input2);
}
double result = 0.0;
if (size >= 1) {
result += v1[0] * v2[0];
for (int i = 1; i < size; ++i)
result -= v1[i] * v2[i];
}
cout << "\nThe 'happy' product of both vectors is: " << result << endl;
}
int main()
{
vector<double> v1;
vector<double> v2;
CalcProduct(v1,v2);
return 0;
}
但是,如果我想计算 A[1]*B[1] - A[3]*B[3] - A[5]*B[5] - ....
?我尝试在 v1
和 v2
中添加 +1,然后它们在 result
中求和,但我的逻辑似乎是错误的。示例输入:
5个
1 2 3 4 5
4 5 6 7 5
预期输出:-18
最佳答案
你在这个循环中进行计算
for(int i = 1; i < size; ++i)
result -= v1[i] * v2[i];
因此,您可以跳转 2,而不是递增 i
:
for(int i = 1; i < size; i+=2) {
result -= v1[i] * v2[i];
}
请注意,检查您是否没有越界是一个好习惯,我也喜欢用 {
和 包围
即使它包含一行。 for
循环体}
编辑:我没有注意到您已经在循环之前添加了第一个元素,您可以通过从 i=3
而不是 1 开始轻松解决此问题。
关于c++ - 查找奇 vector 元素 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083887/