xz <- function(n){
if(n<=0){print("要求正整数")
}else{ i =0
while(n!=1){
if(n%%2==0){n=n/2
}else{
n <- 3*n+1
}
print(paste(n,"跟踪n",sep=","))#看看n是怎么样的一个变化过程
i = i+1
}
print(paste(n,"结果运行ok",paste("循环次数为",i,sep=":"),sep=","))
}
}
此程序 可以知道 输入一个正整数,循环到 1, 可以知道循环次数
现在想知道 按照此规则,如果知道了循环次数,能否知道 此数的集合?
循环次数 数值
i 数值 2*n or if( (n-1)%%3==0 ) (n-1)/3
1 2
2
4 x 2*n if( (n-1)/3==0 ) FLASE x 代表没有数值
3 8 x
4 16 x
5 32 5 # (16-1)%%3==0 TRUE (16-1)/3=5
6 64 x 10 x
7 128 21 20 3
8 256 x 42 x 40 x 6 x
9 512 85 84 x 80
13 12 x
10 1024x170
28 168 x 160 x
26 4 24 x
.. ...................................
此算法遇到的问题, 在循环9次后, 13 是其中一个数, 对应于 循环10次的26 和4, 但是 4是循环2次的数, 怎么把 4去掉?
谢谢!
谢谢
TaskShare 的提醒,顿悟 在奇数的情况下 才是3n+1, 反过来,在知道循环数的情况下, (n-1)/3 得到数必须是奇数。。。
#知道循环次数的情况下,数据的集合
xz.c <- function(m){
n <-2
if(m==1){ n=2
} else{i=2
while(i <=m){
k <-c();j <- c()
k <- 2*n; j <-(n-1)/3
j <-j[(n-1)%%3==0&j!=1&j%%2!=0] #能n-1被3整除,j是奇数且不等于1
n <-c(k,j)
i =i+1
}
}
print(n)
print(length(n))
}
#输入一个正整数,能够知道 循环的次数
xz <- function(n){
if(n<=0){print("要求正整数")
}else{ i =0
while(n!=1){
if(n%%2==0){n=n/2
}else{
n <- 3*n+1
}
i = i+1
}
print(paste(n,"结果运行ok",paste("循环次数为",i,sep=":"),sep=","))
}
}
这两个程序相互对应,大家帮忙相互检测下,谢谢