0

我必须编写一个程序来完成一个算法并且每行最多有 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 次计算。有人可以帮我弄这个吗?

4

1 回答 1

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作为练习留给读者

于 2013-08-12T00:46:08.797 回答