如何执行此代码:
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
感谢您的帮助
答案 0 :(得分:3)
使用模运算符(%),可以计算除法的余数。这通常是程序决定 n 是否可被 f 整除的方式。
iterations = 0;
while (n != 0) {
if (n % 3 == 0) n+=4;
else if (n % 4 == 0) n /=2;
else n--;
iterations++
}
答案 1 :(得分: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。
答案 2 :(得分: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的步骤中收敛到零。但是我已经包括了一名警卫,以防“数量”包围负数。