我试图找到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 ;
}
答案 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
被初始化为向量的最后两个元素的乘积。最后,产品被打印出来。