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)
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