[转载]多种语言的3x+1问题实现

转载自github仓库,原作者云帆沧海

3x+1问题

这个问题有很多别名,都是以被它难倒的数学家命名的,由于别名太多了,所以大家干脆叫它3x+1问题了。
该问题的内容为:有一个整数,如果它是整数,就把它除以2;如果它是一个奇数,就把它乘三再加一。
无论如何,这个程序总会变成4,2,1,4,2,1...的循环。
好消息是,3x+1问题已经在2022年1月被解决啦!

C语言版,作者Expector

#include <stdio.h>

void threexp1(int x) {
    while (x != 1) {
        if (x % 2 == 0) {
            x = x / 2;
            printf("%d\n", x);
        } else {
            x = 3 * x + 1;
            printf("%d\n", x);
        }
    }
    printf("OK\n");
}

int main() {
    threexp1(27);
}

Crystal版,作者云帆沧海

def threexp1(x)

    while  x != 1
        if (x%2) == 0
            x=x/2
            puts x
        else
            x = 3*x+1
            puts x
        end
    end

end


threexp1 42

Go版,作者云帆沧海

package main

import "fmt"

func threexp1(x int) {
	//var ans int = x

	for x != 1 {
		if (x % 2) == 0 {
			x = x / 2
			fmt.Println(x)
		} else {
			x = 3*x + 1
			fmt.Println(x)
		}

	}
}

func main() {
	threexp1(12)
}

Nim版,作者Expector

proc threexp1(x: int) =
    var x: int = x
    while x != 1:
        if x mod 2 == 0:
            x = x div 2
            echo x
        else:
            x = 3 * x + 1
            echo x
    echo "OK"

threexp1(27)

Python版,作者云帆沧海Expector

def threexp1(x: int):
    while x != 1:
        if x % 2 == 0:
            x = x // 2
            print(x)
        else:
            x = 3 * x + 1
            print(x)
    print('OK')

def main():
    threexp1(27)

if __name__ == "__main__":
    main()

Ruby版,作者云帆沧海

def threexp1(x)

    while  x != 1
        if x%2 == 0
            x=x/2
            puts x
        else
            x = 3*x+1
            puts x
        end
    end

end


threexp1 42
122 views
Comments
登录后评论
Sign In
·

欢迎大家来提交不同语言实现的代码!

·

呃,Crystal的代码和Ruby的一样……