2016-08-12 49 views
-1

我在3n + 1猜想中观看了一段视频,只是想试试看能否创建一个简单的程序来复制它的几个周期。试图结合For和If循环

我想要做的是让程序获取输入数字,决定它是奇数还是偶数。如果将它除以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 
+1

什么是你的问题? – excaza

+0

你在'i'和'n'之间混合,并且没有'newn'的用法 – EBH

回答

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 
+0

谢谢Prakhar。这很好。我不知道num2str。 –

+0

您也可以在结束for循环之前为n == 1添加一个检查并跳出它。它可以告诉你在第一次达到1之前需要进行多少次迭代。例如:'if n == 1 disp(['Reached 1 in',num2str(i),'iterations']);打破;结束' – Prakhar

+0

@JamesBlackwell Prakhar大概是害羞地说出这样的话,但是如果这能正确回答你的问题,那么请通过接受它作为答案(通过点击勾号)并且考虑向上投票来传播一些好的魔咒。 –

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 
+0

有问题发布代码。将再次尝试与另一个答案 –

+0

@JamesBlackwell这几乎是我的建议。请注意,对于sprintf,您有两个输入参数,您都试图以十进制打印(奇怪的结果)。在这个答案中,它显示了你如何称呼它。 –

+0

这很有道理,谢谢你对丹尼斯的帮助。我有很多东西要学 –