我必须编写一个完成算法的程序,每行最多10个术语。我有一个问题1)当它达到1和2时停止循环)如何继续下一个递增数字的循环。这就是我应该做的和我拥有的。我应该得到一个低期,高期和增量。第一个计算从低位开始,并完成,当完成时,它应该循环回到低位+增量并再次进行计算。这应该循环,直到达到高数并完成计算。没有完成所有代码,我遇到了麻烦。
void ulamCalc(double numOne, double numTwo,
double increment)
{
int countOne, countTwo;
countTwo = 1;
do
{
for(count = 1; count <= 10; count++)
{
cout << setw(7) << numOne;
if(numOne == 1)
{
cout<< endl;
cout << OUTPUT_TERM << countTwo;
cout << endl << endl;
}
countTwo++;
if(static_cast<int>(numOne) % 2 == 0)
numOne = numOne / 2;
else if(static_cast<int>(numOne) % 2 == 1)
numOne = (numOne * 3) + 1;
}
cout << endl;
} while(numOne >= 1);
此循环在1处停止并输出术语数,但随后是其他行将重复最后3次计算。有人可以帮我弄这个吗?
答案 0 :(得分:1)
这是一个非常简单的任务,但是这里有一些想法可以帮助你更轻松地写这个:
lowterm
highterm
代替numOne
numTwo
int
代替double
。由于您显示的输入和示例输出是整数和整数,因此没有真正的理由在此处使用double
。这是一个让你入门的例子:
void ulamCalc(int low, int high, int inc)
{
for(int term = low; term < high; term += inc)
{
process_term(term);
}
}
int main()
{
ulamCalc(100, 500, 200);
}
输出:
100 50 25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2
300 150 75 226 113 340 170 85 256 128 64 32 16 8 4 2
我将process_term
作为为读者练习。