找到2个数组元素的最大乘积

时间:2016-08-04 22:07:19

标签: c++

我试图找到2个数组元素的最大乘积,所以我的想法是对数组进行排序并乘以最后2个元素。我的代码正在使用不同的测试用例,但在测试用例中。 2 100000 90000 它只有在这个测试用例中才有错误答案! 这是我的代码

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

int main()
{
 int n;
cin >> n ;
int arr [n];


for (int i=0; i<n; i++)
    cin>> arr[i] ;
for (int i=0; i<n; i++)
    for(int j=i+1; j<=n; j++)
        if (arr[j]<arr[i])
            swap(arr[j],arr[i]) ;


cout <<arr[n-1]<<"  "<<arr[n-2] <<endl;
int res = arr[n-1] * arr[n-2];
cout << res ;





}

1 个答案:

答案 0 :(得分:2)

以下代码应该有效:

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

int main()
{
    int num = 0, size = 0;
    std::cin >> size;
    std::vector<int> numbers(size);
    for (int counter = 0; counter < size; counter++) {
        std::cin >> num;
        numbers[counter] = num;
    }

    std::sort(numbers.begin(), numbers.end());
    int max = numbers[size - 1] * numbers[size - 2];
    std::cout << max << std::endl;
}

由于您正在使用可变长度数组,为什么不使用向量?

上面的代码从std::cin获取数字,并将它们放入向量中。然后对矢量进行排序。我们有一个vector - 1大小的变量,所以我们不会超出访问我们元素的范围。 max被初始化为向量的最后两个元素的乘积。最后,产品被打印出来。