我目前正在大学注册一个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;
}
}
答案 0 :(得分:1)
由于一旦n
变为1,循环就会停止,您知道 总是一个奇数。所以变化很简单:
return count + 1;
请注意,您可以将isEven()
功能缩减为一行:
return n % 2 == 0;