我正在从事一个C ++项目并遇到一个令我困惑的问题。我要创建一个电话号码生成器,让用户输入前4个号码,然后生成遵循这两个规则的所有可能的电话号码: 最后6位必须等于33。 第4和第5位不能都是偶数或两者都是奇数。
这是我到目前为止所提出的:
#include <iostream>
using namespace std;
int main()
{//begin main
srand(time(0));
const int MAX_DIGITS = 10;
int num[MAX_DIGITS] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
cout<<"enter the first digit: ";
cin>>num[0];
cout<<"Enter the second digit: ";
cin>>num[1];
cout<<"Enter the third digit: ";
cin>>num[2];
cout<<"Enter the fourth digit: ";
cin>>num[3];
for (int e=0;e<MAX_DIGITS;e++)
{
for(int f=0;f<MAX_DIGITS;f++)
{
for(int g=0;g<MAX_DIGITS;g++)
{
for(int h=0;h<MAX_DIGITS;h++)
{
for(int i=0; i<MAX_DIGITS;i++)
{
for(int j=0;j<MAX_DIGITS;j++)
{
if ((num[e]+num[f]+num[g]+num[h]+num[i]+num[j]) == 33 && (num[3]%2 != 0 && num[4]%2 != 0) )
{
cout<<num[0]<<num[1]<<num[2]<<num[3]<<num[e]<<num[f]<<num[g]<<num[h]<<num[i]<<num[j]<<endl;
}
}
}
}
}
}
}
到目前为止,这对我来说都是有道理的,但程序多次显示一些数字,而且我并不完全确定如何理解偶数/奇数规则。
我仍然是编程的新手,我确信可能有更有效的方法来做到这一点,但我尽我所能,这让我感到困惑。任何帮助,将不胜感激。
提前致谢!
编辑:我的问题是,如何让生成器显示应用了偶数/奇数规则的数字?我最好的想法是使用模数运算符(%)来查看数字除以2的其余部分是否为零,如果是,则数字是偶数。这是我偶然发现的一点,因为我并不完全确定如何实现这一点。对不起,第一次没有更具体。
答案 0 :(得分:0)
1)您永远不会更改num
数组中的值,因此测试它是否包含有效数字不起作用,因为您设置的初始值不符合规则。<登记/>
2)验证是检查两个数字是否都是奇数,而不是一个或另一个。
这是一个似乎有用的版本。我所做的更改是实际更改num
数组,然后使用辅助函数来验证数组中的数字,这样就不会在循环中出现问题。我删除了srand
调用,因为您没有使用随机数和前4位数的输入,以便我更方便地进行测试。如果你愿意,你可以添加它。
#include <iostream>
const int MAX_DIGITS = 10;
bool IsValid(int num[MAX_DIGITS])
{
int sum = 0;
for(int z = 4; z < MAX_DIGITS; ++z)
{
sum += num[z];
}
if(sum != 33)
{
return false;
}
int numodd = 0;
for(int z = 3; z < 5; ++z)
{
numodd += (num[z] % 2);
}
if(numodd != 1)
{
return false;
}
return true;
}
int main()
{
int num[MAX_DIGITS];
num[0] = 5;
num[1] = 5;
num[2] = 5;
num[3] = 1;
for (int e=0;e<MAX_DIGITS;e++)
{
num[4] = e;
for(int f=0;f<MAX_DIGITS;f++)
{
num[5] = f;
for(int g=0;g<MAX_DIGITS;g++)
{
num[6] = g;
for(int h=0;h<MAX_DIGITS;h++)
{
num[7] = h;
for(int i=0; i<MAX_DIGITS;i++)
{
num[8] = i;
for(int j=0;j<MAX_DIGITS;j++)
{
num[9] = j;
if(IsValid(num))
{
for(int z = 0; z < MAX_DIGITS; ++z)
{
if(z == 3 || z == 6)
{
std::cout << '-';
}
std::cout << num[z];
}
std::cout << std::endl;
}
}
}
}
}
}
}
}