-2

我正在做一个 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 的余数是否为零,如果是,则这些数字是偶数。不过,这是我绊倒的地方,因为我不完全确定如何实现这一点。很抱歉第一次没有更具体。

4

1 回答 1

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;
                            }
                        }       
                    }
                }
            }   
        }
    }
}
于 2013-09-08T01:37:52.590 回答