Ошибка сегментации (ядро сброшено) ошибка времени выполнения с программой MaxPairwiseProduct - PullRequest
0 голосов
/ 16 декабря 2018
#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];
}

Я пытаюсь реализовать, казалось бы, продвинутый алгоритм, чтобы найти максимальное парное произведение.Я продолжаю получать ошибки Сегментации (core dumped) и знаю, что это как-то связано с моими указателями и областью действия моих функций.Любой совет или советы?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018
#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];
}

Модифицированная версия с заданным пользователем размером вектора и возможностью определения пользовательских вводимых значений.

0 голосов
/ 16 декабря 2018
#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];
}

Я заставил его работать, был странный поздний ночной пердеть мозга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...