计算最大成对乘积C ++时出现问题

时间:2019-06-23 23:05:39

标签: c++

这是我的最大成对乘积代码。它需要一个数字数组,对它们进行排序以找到第一个和第二个最大数字,然后返回它们的乘积。该代码适用于较小的数组和较小的值。但是它会因某些数字而失败,并且在诸如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;
}

2 个答案:

答案 0 :(得分:2)

(根据其他人的评论进行编辑)

除了@dyukha指出的内容-对于(int j = 0; j <= n; j ++)-也: maxind2在下面的代码中可以为负,该代码用于下标向量。

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])

解决方案是将if中的逻辑表达式的优先级更改为:

if(maxind1!=j && (maxind2==-1 || numbers[j]>numbers[maxind2]))

答案 1 :(得分:0)

已解决 谢谢大家的帮助,它终于正常运行了。 问题的根源是我没有在第二个if条件和for循环的条件中使用括号(使用<代替<=) 解决错误后的代码:

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

int64_t MaxPairwiseProduct(const std::vector<int64_t>& numbers) {

    int n = numbers.size();


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(j!=maxind1 && (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;}