0

如何执行此代码:

if a number n is divisible by 3, add 4 to n;
if n is not divisible by 3 but by 4, divise n by 2;
if n is not divisible by 3, not by 4, make n=n-1.

我的问题是我不知道如何连续制作这个。例如:对于数字 6,我必须:

6, 10, 9, 13, 12, 16, 8, 4, 2, 1 和 0

6+4=10;10-1=9;9+4=13;13-1=12;12+4=16;16/2=8.....0

这进行了 10 次操作。

所以我的程序必须返回:6---10

谢谢你的帮助

4

3 回答 3

3

使用模运算符 (%),您可以计算除法的余数。这通常是程序决定n是否可被f整除的方式。

iterations = 0;
while (n != 0) {
    if (n % 3 == 0) n+=4;
    else if (n % 4 == 0) n /=2;
    else n--;
    iterations++
}
于 2013-10-29T12:42:06.120 回答
0

我建议采用递归方法:

int num_ops(int num, int prev_ops) {
  if(num == 0) return prev_ops;

  if((num % 3) == 0)
    return num_ops(num+4, prev_ops+1);

  if((num % 4) == 0)
    return num_ops(num/2, prev_ops+1);

  else
    return num_ops(num-1, prev_ops+1);
}

首次调用 num_ops 时,请确保 prev_ops 参数为 0。

于 2013-10-29T12:44:18.377 回答
0

您必须使用@jubjub 的代码循环,直到系列达到 0,计算循环的次数:

#include <iostream> 
#include <cmath> // pour exp() 
using namespace std; 
int main() 
{ 
    for (int n=0; n<9; ++n)
    { 
        int count = 0, next = n;
        while (next != 0 && count >= 0) 
        {
            if (next % 3 == 0) 
                next += 4;
            else if (next % 4 == 0) 
                next /= 2;
            else 
                next --;
            count ++;
        }
        if (count < 0) 
            cout << "n=" << n << ": could not converge to 0" << endl;
        else
            cout << "n=" << n << ": required " << count << endl;
    }
    return 0;
}

对于这个特定的系列,我不知道是否有证据证明它总是会在少于取决于 n 的一些步数内收敛到零。但是我已经包括了一个警卫,以防“计数”变成负数。

于 2013-10-30T04:36:44.083 回答