如何使用C ++计算Hailstone序列中的奇数个数

时间:2014-09-08 02:39:39

标签: c++

我目前正在大学注册一个Into to C ++课程。其中一个作业要求学生创建一个C ++程序,提示用户输入一个整数,然后显示从输入的值开始到1结束的hailstone序列。此外,还需要程序输出以下内容: 1.序列的长度 2.序列中最大的数字 3.序列中奇数的整数 4.从1到输入值n的最长序列

我已完成所有要求,但第3项除外。下面是我为完成此任务而创建的函数的副本。

int oddCont(int n)
{

    int count = 0; 
    while (n != 1) 
    {
        if (!isEven(n))
        {
            count++; 
        }
        n = nextVal(n);
    }

    return count; 
}

我遇到的问题是此函数返回的值小于正确的数字。例如,如果有四个奇数,则打印3.我还发现问题,特别是该函数不计算序列中的最后一个数字1,作为奇数。所以,如果我得到以7开头并以1结尾的冰雹序列,它将计算所有奇数,但是1(7,11,17,13和5)。但是,我不确定如何修改它。

我真的很感激任何有助于解决此问题的建议。另外,为方便起见,我将包含上述函数中调用的其他两个函数的定义。

//returns true if n is even and false otherwise
bool isEven(int n) 
{
    if (n % 2 == 0)
    {
        return true; 
    }
    else 
    {
        return false; 
    }

}

//returns hailstone sequence value that proceeds n
int nextVal(int n)
{
    if (isEven(n))
    {
        return n/2;
    }
    else 
    {
        return 3 * n + 1; 
    }
}

1 个答案:

答案 0 :(得分:1)

由于一旦n变为1,循环就会停止,您知道 总是一个奇数。所以变化很简单:

return count + 1;

请注意,您可以将isEven()功能缩减为一行:

return n % 2 == 0;