试图结合For和If循环

时间:2016-08-12 13:01:12

标签: matlab if-statement for-loop math octave

我观看了关于3n + 1猜想的视频,只是想试着看看我是否可以创建一个简单的程序来复制它的几个周期。

我想做的是让程序输入一个输入数字,判断它是奇数还是偶数。如果将其除以2,则使用该数字继续循环。或者,如果值为奇数,则将其乘以3并加1,然后继续循环。

即如果数字是7,那么它是奇数,所以转到22,即使这样也会转到11,这是奇怪的所以转到34,这甚至是去17等等。

这是我的尝试,我只是想尝试它的乐趣而无处可去。我希望它只是一些我必须处理的代码,如果不是我可以离开它。

#Want to do 10 loops of n
#If n is even /2
#if n is odd n*3 +1
n = input("enter first value for n")
for i = (n:10); 
  disp(i)
  if mod(i, 2) == 0
  % i is even
  ans = sprintf("%d", i ," is even")
  newn = (i/2)
  disp(ans)
  else
  % i is odd
  ans = sprintf("%d", i ," is odd")
  disp(ans)
  newn = (3*n +1)
  end
end

编辑:

我遇到了使用代码回复的问题,所以这里是我得到帮助的更新代码似乎运行良好。我不知道为什么sprintf工作得不好。

n = input("enter first value for n")
for i = 1:10 
  if mod(n, 2) == 0
  % n is even
  n = n/2
  else
  % n is odd
  n = 3*n +1
  end
end

2 个答案:

答案 0 :(得分:0)

您的代码存在多个问题,包括但不限于正在计算但从未使用过的变量,以及in的奇怪组合。

不确定这是否完美,但我认为这应该大致是你想做的事情:

#Want to do 10 loops of n
#If n is even /2
#if n is odd n*3 +1
n = 123
for i = (1:10)
  disp(i)
  disp(n)
  if mod(n, 2) == 0
  % n is even
    disp(sprintf("%d%s", n ," is even"))
    n = (n/2);
  else
    % n is odd
    disp(sprintf("%d%s", n ," is odd"))
    n = (3*n +1);
  end
end

答案 1 :(得分:0)

clc

n = input('Enter first value for n : ');

number_of_loops = 10;

for i = 1 : number_of_loops
    disp(['Loop # ', num2str(i)]);
    if mod(n, 2) == 0
        disp([num2str(n), ' is even']);
        n = n/2;
    else
        disp([num2str(n), ' is odd']);
        n = 3*n + 1;
    end
    disp(['New number = ', num2str(n)]);
end