全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2372 13
2012-11-30
悬赏 50 个论坛币 已解决
213858t7tl2gwtuugw19ea.gif

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=","))  
  }
}

这两个程序相互对应,大家帮忙相互检测下,谢谢





最佳答案

TaskShare 查看完整内容

按我对你的要求的理解,试着回答你的问题: 从13算出26和4时,要想剔除4这个不对的数字,我觉得只需要加个简单的检验:即倒算回去是13吗。即如下: - 检验26:按你的规则:26是个偶数,所以26/2,是13。所以26通过检验。 - 检验4:按你的规则:4是个偶数,所以4/2,不是13。所以4不通过检验。这样4就被排除了。 所以,你的程序中需要加入个上述的检验步骤。 具体的程序语句靠你了,因为我没学过R语言。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-11-30 11:44:47
按我对你的要求的理解,试着回答你的问题:

从13算出26和4时,要想剔除4这个不对的数字,我觉得只需要加个简单的检验:即倒算回去是13吗。即如下:
- 检验26:按你的规则:26是个偶数,所以26/2,是13。所以26通过检验。
- 检验4:按你的规则:4是个偶数,所以4/2,不是13。所以4不通过检验。这样4就被排除了。
所以,你的程序中需要加入个上述的检验步骤。

具体的程序语句靠你了,因为我没学过R语言。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-30 11:45:51
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]
    n <-c(k,j)
    i =i+1
    }
}
  print(n)
}

编个一个有bug的程序。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-30 12:15:05
你还在搞这个啊?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-30 12:18:17
qoiqpwqr 兄, 帮想想撒
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-30 12:33:24
jmpamao 发表于 2012-11-30 12:18
qoiqpwqr 兄, 帮想想撒
这个太复杂,我的想法就是穷举
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群