【发布时间】:2019-11-05 18:34:10
【问题描述】:
这是我的最大成对积代码。它需要一个数字数组,对它们进行排序以找到第一个和第二个最大数字,然后返回它们的乘积。该代码适用于小数组和小值。但是它会因某些数字而失败,并且它也会因大数字(例如 10000 等)而失败。
我认为这是我使用的数据类型有问题,所以我将数据类型定义为 int_64t 以便它可以处理大量数字,但我仍然得到相同的错误结果!谁能帮我解决这个问题?
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
int64_t MaxPairwiseProduct(const std::vector<int64_t>& numbers) {
int n = numbers.size();
if(n<2)
return;
int maxind1=-1;
for (int i=0; i<=n; i++)
{
if(maxind1==-1 || numbers[i]>numbers[maxind1])
maxind1=i;
int maxind2=-1;
for (int j=0; j<=n; j++)
{
if(maxind1!=j && maxind2==-1 || numbers[j]>numbers[maxind2])
maxind2=j;}
int64_t restult=numbers[maxind1]*numbers[maxind2];
return restult;
}
int main() {
int n;
std::cin >> n;
std::vector<int64_t> numbers(n);
for (int i = 0; i < n; ++i) {
std::cin >> numbers[i];
}
cout << MaxPairwiseProduct(numbers) << "\n";
return 0;
}
【问题讨论】:
-
你能解释一下“严重失败”是什么意思吗?
-
例如,当我给它一个由 10000、10、1、2、3 组成的 5 个数字的数组时,它应该返回 100000,而不是给我一些随机的大数字,比如 17346274什么的。
-
错误在这里:
for (int j=0; j<=n; j++)。应该是j < n。另一个循环也一样。 -
更新:现在代码可以很好地处理像 10000 这样的大数字,但它会因为小数字而失败!我尝试了一组由 1 2 3 组成的 3 个数字,结果是 9!虽然它应该给出 2*3=6,但有什么想法吗?
-
这一行是什么意思:
if(maxind1!=j && maxind2==-1 || numbers[j]>numbers[maxind2])?这可能是一个优先级问题。您可能需要添加括号。
标签: c++