我正在尝试创建一个程序,它将向量1('V1')中的3个不相等的值相乘,并在向量2('V2')中写入。我正在使用3'表示'循环和一个计算向量2的值的数字的整数。但程序会跳过'if'语句。
#include <vector>
#include<fstream>
#include<iostream>
#include <algorithm>
using namespace std;
void earase(vector<int> V2, unsigned int z){
V2.erase(V2.begin() + z);
}
void main(){
unsigned int N;
unsigned int z = 0;
vector<int> V1;
vector<int> V2;
int input;
ifstream file1;
file1.open("input.txt");
file1 >> N;
for (unsigned int i = 0; i < N; i++){
file1 >> input;
V1.push_back(input);
}
file1.close();
for (unsigned int i = 0; i < V1.size(); i++){
for (unsigned int j = 0; j < V1.size(); j++){
for (unsigned int k = 0; k < V1.size(); k++){
V2.push_back(V1[i] * V1[j] * V1[k]);
if (i == j || i == k || j == k || (i == k ) && k==j)
{
void earase(vector<int> V2, unsigned int z);
}
z++;
}
}
}
sort(V2.begin(), V2.end());
ofstream file2;
file2.open("output.txt");
file2 << V2.back();
file2.close();
}
这是input.txt文件
4
1 2 3 4
完成程序后,对向量2进行排序,并将向量2中的最后一个数字写入'output.txt',但它只会在向量1乘以3的相同值时写入值。
我认为问题出现在'if'语句和'z'整数中,有没有更有效的方法来做到这一点?
答案 0 :(得分:0)
if
的正文实际上与您预期的完全不同:
if (i == j || i == k || j == k || (i == k ) && k==j)
{
void earase(vector<int> V2, unsigned int z); // <<<<<<<
}
您没有致电 earase
。相反,您声明一个名为earase
的函数。如果要调用该函数,请将其命名为:
if (i == j || i == k || j == k || (i == k ) && k==j)
{
earase(V2, z);
}
顺便说一句,您可以通过一些调试输出(例如std::cout << "if entered";
之前/之前的earase
)轻松检查它。但是,请记住,这实际上并没有改变V2
。
答案 1 :(得分:0)
非平等职位是微不足道的,不需要测试(假设您只想要每个组合一次):
for (unsigned int i = 0; i < V1.size(); i++){
for (unsigned int j = 0; j < i; j++){
for (unsigned int k = 0; k < j; k++){
V2.push_back(V1[i] * V1[j] * V1[k]); } } }
如果由于某种原因,你想多次想要所有的每个组合(好像你已经完成了所有N个立方体的可能性,只跳过重复的位置),只需按照上述简单的方式进行多次推送。