我有一个CS问题,它说:
我们定义一个级数2 3为一个第一项为某个自然数的级数。如果级数中的成员数n的值为x,则级数中第(n +1)个成员的值为:(x % 2 ==0)?x/2:x*3 +1。
你必须编写一个程序,打印两个或三个系列,从数字1到25开始(不包括),但当生成的值大于1000或值已出现在前一系列中时,将停止创建每个系列(因此,从该数组向前生成的子系列已经生成)。生成的值必须再次显示,从而停止该系列的生产。
现在我写的代码输出了一个与解决方案输出类似的结果,但是它需要做一些修改才能得到相同的结果,这是我的代码。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int array[25];
for (int i = 1; i < 25; i++)
{
int currentNum = i;
int theNumAfter;
bool occured = false;
while (occured == false)
{
for (int i = 0; i <= 25; i++)
{
if (array[i] == currentNum)
{
occured = true;
cout << endl;
}
}
array[currentNum] = currentNum;
cout << currentNum << " ";
if (currentNum % 2 == 0)
{
theNumAfter = currentNum / 2;
}
else
{
theNumAfter = (3 * currentNum) + 1;
}
array[theNumAfter] = theNumAfter;
cout << theNumAfter << " ";
currentNum = theNumAfter;
}
}
}
代码不接受任何输入,只有一个正确输出,应该是:
我代码结果:
我应该在代码中改变什么,所以我们有匹配的输出。提前感谢
1条答案
按热度按时间6fe3ivhb1#
当产生大于1000的值或已经出现在先前系列中的值时,将停止创建每个系列。
直到24,生成的值都不大于1000,但是发布的代码仍然有一个访问越界错误:
请注意,预期输出中的许多数字大于25。
我不知道这部分应该达到什么效果:
但它未能产生预期的输出。
我会用一个简单的1000个
bool
的数组来记住已经出现的数字。可测试here。