【发布时间】:2015-12-10 05:40:38
【问题描述】:
我正在尝试创建一个程序,它将向量 1 ('V1') 中的 3 个不相等的位置相乘,并找到最大乘法。
我正在使用 3 个“for”循环来进行计数和写作。程序获取位置量“N”,然后是“input.txt”中的所有“N”个数字。之后,它获取最大位置'max'并写入'output.exe'。
但我需要使程序尽可能高效,16 MB 内存限制和 1 秒时间限制(我得到 1.004 秒和 33 MB)。有没有更有效的方法来做到这一点?
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N;
long long max = -9223372036854775807;
int input;
vector<long long> V1;
ifstream file1;
file1.open("input.txt");
file1 >> N;
V1.resize(N);
for (int i = 0; i < N; i++)
{
file1 >> V1[i];
}
for (int i = 0; i < N; i++)
for (int j = 0; j < i; j++)
for (int k = 0; k < j; k++)
if (V1[i] * V1[j] * V1[k] > max)
{
max = V1[i] * V1[j] * V1[k];
}
ofstream file2;
file2.open("output.txt");
file2 << max;
file2.close();
}
文件 Input.txt
5
10 10 10 -300 - 300
【问题讨论】:
-
避免计算和
pop_back先做if可以给一点。嗯...你需要if吗? -
也许
V1.resize在push_back之前会有帮助。如果你这样做,你只会分配一个内存。 -
感谢您的帮助,
If是该程序上一个版本的剩余部分,我现在将其删除。现在我使用 1 个整数而不是整个向量来存储最大数量。 -
那么你应该更新你的描述。描述类型表明程序必须将结果存储在向量中。但是现在您已经将要求更改为:找到最大值。那是两个非常不同的程序。 :-)