Получение максимального количества продукта Pair Wise C ++, и результат не всегда соответствует моему коду - PullRequest
0 голосов
/ 09 июля 2020

Задача, которую необходимо решить: для данного массива или последовательности чисел цель состоит в том, чтобы найти максимальное число, полученное умножением некоторых двух чисел в этой последовательности.

пример входов и выходов

Input:
2
100000 90000

Correct output:
9000000000

Input:
3
1 2 3

Correct output:
6

Мое решение: получить 2 максимальных числа в указанной последовательности и умножить их, мой код работает, если только с одним решением

Мой код

#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std;
void print(std::vector<int> const& input)
{
    for (int i = 0; i < input.size(); i++) {
        std::cout << input.at(i) << '   ';
    }
}

int main()
{
   
    vector<int> seq;
    int n;

    // Read the nb of elements in vect
    cout << "please enter the number of elements in sequence"<<endl;
    cin >> n;

    // Read the vector 
    cout << "please enter the elements of the sequence"<<endl;
    for (int i = 0; i < n; i++)
    {
        int input;
        cin >> input;
        seq.push_back(input);
    }
    cout << "sequence you entered" << endl;
    print(seq);


    // Find the 1st max element 
    double FisrtMax=*max_element(seq.begin(), seq.end());
    cout <<endl<< "First Maximum Element is" << endl<< FisrtMax;

    // remove the found element
    std::vector<int>::iterator PosF = find(seq.begin(), seq.end(), FisrtMax);
    seq.erase(PosF);

    cout <<endl<< "sequence After removing the 1st maximum element" << endl;
    print(seq);


    // Find the 2nd max element
    double SecMax = *max_element(seq.begin(), seq.end());
    cout <<endl<< "Second Maximum Element is" << endl << SecMax;

    //multiply the 2 elements
    int total =  (FisrtMax * SecMax);
    cout <<endl<<"The Product of the 2 elemnts is  "<< total;

    return 0;
}

Вход:

please enter the number of elements in sequence
2
please enter the elements of the sequence
1000000
90000

Вывод:

please enter the number of elements in sequence
2
please enter the elements of the sequence
1000000
90000
sequence you entered
10000002105376900002105376
First Maximum Element is
1e+06
sequence After removing the 1st maximum element
900002105376
Second Maximum Element is
90000
The Product of the 2 elements is  -2147483648

1 Ответ

2 голосов
/ 09 июля 2020

В коде несколько ошибок:

  1. cout << ... << ' ' синтаксис пытается напечатать три пробел символы буквы, состоящие из одинарных кавычек, которые допускают использование одной буквы, а не нескольких. Вместо этого используйте " ".

  2. Полученный результат не может храниться в виде целого числа, вам необходимо определить size_t (которое в большинстве компиляторов заменяется на unsigned long long).

Боковые подсказки:

  • В этом синтаксисе:

     for (int i = 0; i < input.size(); i++)
    

    Вы пытаетесь сравните целое число с size_t (возвращается функцией-членом size() объекта векторного класса). Вместо этого объявите i с size_t.

  • В этом синтаксисе:

     std::vector<int>::iterator PosF = find(seq.begin(), seq.end(), FisrtMax);
    

    Вам не нужно определять такой длинный тип std::vector<int>::iterator, используйте здесь ключевое слово auto:

     auto PosF = find(seq.begin(), seq.end(), FirstMax);
    

Код переопределен:

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

void print(std::vector<size_t> const &input) {
    for (size_t i = 0; i < input.size(); i++)
        std::cout << input.at(i) << "   ";
}

int main(void) {
    vector<size_t> seq;
    int n;

    // Read the nb of elements in vect
    cout << "please enter the number of elements in sequence" << endl;
    cin >> n;

    // Read the vector
    cout << "please enter the elements of the sequence" << endl;

    for (int i = 0; i < n; i++) {
        int input;
        cin >> input;
        seq.push_back(input);
    }
    cout << "sequence you entered" << endl;
    print(seq);

    // Find the 1st max element
    double FisrtMax = *max_element(seq.begin(), seq.end());
    cout << endl
         << "First Maximum Element is" << endl
         << FisrtMax;

    // remove the found element
    auto PosF = find(seq.begin(), seq.end(), FisrtMax);
    seq.erase(PosF);

    cout << endl << "sequence After removing the 1st maximum element" << endl;
    print(seq);

    // Find the 2nd max element
    double SecMax = *max_element(seq.begin(), seq.end());

    cout << endl
         << "Second Maximum Element is" << endl
         << SecMax;

    //multiply the 2 elements
    size_t total = (FisrtMax * SecMax);
    
    cout << endl
         << "The Product of the 2 elements is  " << total;

    return 0;
}

Его входы:

please enter the number of elements in sequence
2
please enter the elements of the sequence
1000000
90000

Он выводит:

sequence you entered
1000000   90000
First Maximum Element is
1e+06
sequence After removing the 1st maximum element
90000   
Second Maximum Element is
90000
The Product of the 2 elemnts is  90000000000

Редактировать: Эта программа успешно работает на OnlineGDB , и программа была скомпилирована с флагом C ++ 14.

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