为什么我的 C++ 最大化成对乘积代码不起作用?
Why isn't my C++ maximizing pairwise product code working?
所以这道题要求我从给定的非负整数序列中找出最大的乘积。我所做的是尝试从序列中找到最大的两个整数(为此我使用了一个向量,通过输入 n 个数字)并将它们相乘,因为没有负整数。我也使用了 long long 类型,因为仅 int 类型不足以处理大量数据。每当我尝试 运行 程序时,我总是得到一个随机的巨大数字作为输出:
#include <iostream>
#include <vector>
using namespace std;
long long max_prod(const vector<int>& numbers) {
int max1 = -1;
int max2 = -1;
int n = numbers.size();
for (int i = 0; i<n; i++){
if (numbers[i] > numbers[max1])
max1 = i;
}
for (int j = 0; j < n; j++) {
if (numbers[j] > numbers[max2] && j!=max1)
max2 = j;
}
return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}
int main(){
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i<n; i++){
cin >> numbers[i];
}
long long result = max_prod(numbers);
cout << result << "\n";
return 0;
}
the last line is the output given by the program
你在这里有未定义的行为
long long max_prod(const vector<int>& numbers) {
int max1 = -1; <<<<<====
int max2 = -1;
int n = numbers.size();
for (int i = 0; i < n; i++) {
if (numbers[i] > numbers[max1]) <<<<<==
max1 = i;
}
for (int j = 0; j < n; j++) {
if (numbers[j] > numbers[max2] && j != max1)
max2 = j;
}
return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}
您尝试访问 numbers[-1]
(两次在 j 循环中,一次在 i 循环中)。
将 maxi 和 maxj 设置为 0
所以这道题要求我从给定的非负整数序列中找出最大的乘积。我所做的是尝试从序列中找到最大的两个整数(为此我使用了一个向量,通过输入 n 个数字)并将它们相乘,因为没有负整数。我也使用了 long long 类型,因为仅 int 类型不足以处理大量数据。每当我尝试 运行 程序时,我总是得到一个随机的巨大数字作为输出:
#include <iostream>
#include <vector>
using namespace std;
long long max_prod(const vector<int>& numbers) {
int max1 = -1;
int max2 = -1;
int n = numbers.size();
for (int i = 0; i<n; i++){
if (numbers[i] > numbers[max1])
max1 = i;
}
for (int j = 0; j < n; j++) {
if (numbers[j] > numbers[max2] && j!=max1)
max2 = j;
}
return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}
int main(){
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i<n; i++){
cin >> numbers[i];
}
long long result = max_prod(numbers);
cout << result << "\n";
return 0;
}
the last line is the output given by the program
你在这里有未定义的行为
long long max_prod(const vector<int>& numbers) {
int max1 = -1; <<<<<====
int max2 = -1;
int n = numbers.size();
for (int i = 0; i < n; i++) {
if (numbers[i] > numbers[max1]) <<<<<==
max1 = i;
}
for (int j = 0; j < n; j++) {
if (numbers[j] > numbers[max2] && j != max1)
max2 = j;
}
return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}
您尝试访问 numbers[-1]
(两次在 j 循环中,一次在 i 循环中)。
将 maxi 和 maxj 设置为 0