我正在做一个简单的程序,我接受电话号码的前四位数字,并且必须生成其余数字的所有可能性。最后 6 位数字之和必须等于 33。如果第四位数字为奇数,则第五位数字必须为偶数,如果第四位数字为偶数,则第五位数字必须为奇数。
我已经确定它没有将数字相加,并且函数plotNumbers() 中的for 循环实际上没有循环。我完全迷失了。大家有什么想法吗?
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4);
bool findTrueFalse(vector<int> vec);
int _tmain(int argc, _TCHAR* argv[])
{
int digit1, digit2, digit3, digit4;
vector<int> number;
cout << "Enter the first four digits:\n";
cin >> digit1;
cin >> digit2;
cin >> digit3;
cin >> digit4;
if (digit4 == 0 || digit4 == 2 || digit4 == 4 || digit4 == 6 || digit4 == 8)
{
number.push_back(1);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else if (digit4 == 1 || digit4 == 3 || digit4 == 5 || digit4 == 7 || digit4 == 9)
{
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else
{
cout << "\nYou entered an illegal value. Good-bye.\n\n";
}
system("pause");
return 0;
}
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4)
{
for ( ; number1[0] < 10; number1[0] += 2)
{
number1.push_back(0);
for ( ; number1[1] < 10; ++number1[1])
{
number1.push_back(0);
for ( ; number1[2] < 10; ++number1[2])
{
number1.push_back(0);
for ( ; number1[3] < 10; ++number1[3])
{
number1.push_back(0);
for ( ; number1[4] < 10; ++number1[4])
{
number1.push_back(0);
for ( ; number1[5] < 10; ++number1[5])
{
bool total33 = findTrueFalse(number1);
if (total33)
{
cout << "(" << digit1 << digit2 << digit3 << ") ";
cout << digit4 << number1[0] << number1[1] << " - ";
cout << number1[2] << number1[3] << number1[4] << number1[5] << endl;
}
}
}
}
}
}
}
}
bool findTrueFalse(vector<int> vec)
{
int total = 0;
vector<int>::iterator postIt;
for (postIt = vec.begin(); postIt != vec.end(); ++postIt)
{
total += *postIt;
}
if (total == 33)
{
return true;
}
else
{
return false;
}
}
最佳答案
首先,尝试使用短代码以避免出现以下错误:
if (digit4 % 2 == 0)
而不是
if (digit4 == 0 || digit4 == 2 || digit4 == 4 || digit4 == 6 || digit4 == 8)
其次,您只需执行一次 number1.pushback(0)
,但您要执行多次。您知道运行 number1.pushback(0)
时会发生什么吗?我想不是:
- 它会在 vector
number1
末尾添加一个值为0
的新元素
我建议使用以下代码(您进行缩进):
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4);
bool findTrueFalse(vector<int> vec);
int _tmain(int argc, _TCHAR* argv[])
{
int digit1, digit2, digit3, digit4;
vector<int> number;
cout << "Enter the first four digits:\n";
cin >> digit1;
cin >> digit2;
cin >> digit3;
cin >> digit4;
if (digit4 % 2 == 0)
{
number.push_back(1);
for (int i=0; i<5; i++)
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else if (digit4 % 2 == 1)
{
number.push_back(0);
for (int i=0; i<5; i++)
number.push_back(0);
plotNumbers(number, digit1, digit2, digit3, digit4);
}
else
{
cout << "\nYou entered an illegal value. Good-bye.\n\n";
}
system("pause");
return 0;
}
void plotNumbers(vector<int> number1, int digit1, int digit2, int digit3, int digit4)
{
for ( ; number1[0] < 10; number1[0] += 2)
{
number1[1] = 0;
for ( ; number1[1] < 10; ++number1[1])
{
number1[2] = 0;
for ( ; number1[2] < 10; ++number1[2])
{
number1[3] = 0;
for ( ; number1[3] < 10; ++number1[3])
{
number1[4] = 0;
for ( ; number1[4] < 10; ++number1[4])
{
number1[5] = 0;
for ( ; number1[5] < 10; ++number1[5])
{
bool total33 = findTrueFalse(number1);
if (total33)
{
cout << "(" << digit1 << digit2 << digit3 << ") ";
cout << digit4 << number1[0] << number1[1] << " - ";
cout << number1[2] << number1[3] << number1[4] << number1[5] << endl;
}
}
}
}
}
}
}
}
bool findTrueFalse(vector<int> vec)
{
int total = 0;
vector<int>::iterator postIt;
for (postIt = vec.begin(); postIt != vec.end(); ++postIt)
{
total += *postIt;
}
if (total == 33)
{
return true;
}
else
{
return false;
}
}
关于c++ - 我没有任何编译错误,但我的代码无法工作。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16997344/