MaxPairwiseProduct程序的分段故障(核心转储)运行时错误


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int MaxPairwiseProduct(vector<int>& numbers);
//declaration
vector<int> *x;
x->push_back(1);
x->push_back(2);
int answer = MaxPairwiseProduct(*x);
cout << answer;
}
int MaxPairwiseProduct(vector<int>& numbers) {
int index1 =  1;
int index2;
//vector<int> numbers = number;
int n = numbers.size();
for(int i = 2;i < n;++i){
if(numbers[i]>numbers[index1]){
index1 = i;
}
}
if(index1 == 1){
index2 = 2;
} else {
index2 = 1;
}
for(int i = 1;i < n;++i){
if(numbers[i] != numbers[index1] && numbers[i]>numbers[index2]){
index2 = i;
}
}
numbers[index1] * numbers[index2];
return numbers[index1] * numbers[index2];
}

我正在尝试实现一个看似先进的算法来找到最大成对乘积。我不断地遇到分段错误(核心转储(,我知道这可能与我的指针和函数范围有关。有什么建议或建议吗?

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int MaxPairwiseProduct(vector<int>& numbers);
//declaration
vector<int> *x = new vector<int>();
x->push_back(7);
x->push_back(4);
x->push_back(5);
x->push_back(6);

int answer = MaxPairwiseProduct(*x);
cout << answer;delete x;
}
int MaxPairwiseProduct(vector<int>& numbers) {
int index1 =  1;
int index2;
//vector<int> numbers = number;
int n = numbers.size();
for(int i = 0;i < n;++i){
if(numbers[i]>numbers[index1]){
index1 = i;
}
}
if(index1 == 1){
index2 = 2;
} else {
index2 = 1;
}
for(int i = 0;i < n;++i){
if(numbers[i] != numbers[index1] && numbers[i]>numbers[index2]){
index2 = i;
}
}
return numbers[index1] * numbers[index2];
}

我开始工作了——深夜有个奇怪的大脑放屁。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
long MaxPairwiseProductFast(vector<long>& numbers);
long N, input;
vector<long> *V = new vector<long>();
cin >> N;

do {
V->push_back(input);}
while (V->size() <= N && cin >> input);
long answer = MaxPairwiseProductFast(*V);
cout << answer;
delete V;
}
long MaxPairwiseProductFast(vector<long>& numbers) {
int index1 =  1;
int index2 = 1;
int n = numbers.size();
for(int i = 2;i < n;++i){
if(numbers[i]>numbers[index1]){
index1 = i;
}
}
if(index1 == 1){
index2 = 2;
} else {
index2 = 1;
}
for(int i = 2;i < n;++i){
if(i != index1 && numbers[i]>numbers[index2]){
index2 = i;
}
}
return  (long)(numbers[index1] * numbers[index2]);
}
long MaxPairwiseProduct(vector<long>& A) {
int index = 1;
int n = A.size();
for(int i = 2; i < n; ++i){
if (A[i] > A[index]){
index = i;
}
}
swap(A[index], A[n]);
index = 1;
for (int i = 2; i < n-1; ++i){
if(A[i] > A[index]){
index = i;
}
}
swap(A[index], A[n - 1]);
return A[n-1] * A[n];
}

修改版本,具有用户定义的矢量大小和定义用户输入值的能力。

最新更新