楼主: tbjwaixy
3670 16

[问答] R语言编程 [推广有奖]

  • 3关注
  • 1粉丝

已卖:1份资源

大专生

40%

还不是VIP/贵宾

-

威望
0
论坛币
226 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
209 点
帖子
20
精华
0
在线时间
68 小时
注册时间
2013-9-18
最后登录
2014-11-24

楼主
tbjwaixy 发表于 2013-10-21 11:07:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
前几天看到一个题目,感觉在其他里面比较好实现,但是试了一下,在R里面一直没办法实现,特意来向各位大神们请教一下。
就是比较经典的猴子分桃问题。

五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。问分之前桃子数最少有多少个?第五个猴子拿走后还剩多少个?
二维码

扫码加我 拉你入群

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

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

关键词:R语言编程 语言编程 R语言 语言编程

沙发
yywan0913 在职认证  发表于 2013-10-21 13:51:10
x=0
repeat{
x=x+1
x1=1/5*(x-1)
x2=1/5*(4*x1-1)
x3=1/5*(4*x2-1)
x4=1/5*(4*x3-1)
x5=1/5*(4*x4-1)
if (x1%%1==0&&x2%%1==0&&x3%%1==0&&x4%%1==0&&x5%%1==0)
break
}
x
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
qoiqpwqr + 1 分析的有道理
tbjwaixy + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

是什么给了你自信

藤椅
yywan0913 在职认证  发表于 2013-10-21 13:52:15
x=0
repeat{
x=x+1
x1=1/5*(x-1)
x2=1/5*(4*x1-1)
x3=1/5*(4*x2-1)
x4=1/5*(4*x3-1)
x5=1/5*(4*x4-1)
if (x1%%1==0&&x2%%1==0&&x3%%1==0&&x4%%1==0&&x5%%1==0)
break
}
x
x5
是什么给了你自信

板凳
tbjwaixy 发表于 2013-10-21 18:12:46
yywan0913 发表于 2013-10-21 13:52
x=0
repeat{
x=x+1
谢谢。我一直在用for作循环。感觉对R还是不会。谢谢你了。

报纸
jmpamao 发表于 2013-10-21 20:22:52
如果猴子为  n   的时候, 怎么表示这个函数呢?
大家讨论看看撒

地板
jmpamao 发表于 2013-10-24 19:33:00
jmpamao 发表于 2013-10-21 20:22
如果猴子为  n   的时候, 怎么表示这个函数呢?
大家讨论看看撒
还是我来做做看了;
n只猴子,第一个猴子,先吃一个,再平均分。。。。
n= 0 x0
n=1 p*(x0-1)
n=2 p*(f(x1)-1)
.....
n=n  p*(f(x(n-1))-1)    p=(n-1)/n
考虑递归。
  1. monkey <- function(n){
  2.   p = (n-1)/n
  3.   peach <- function(x,n){
  4.   
  5.     if(n == 0) x
  6.     else return(p*(peach(x,n-1)-1))
  7.   }
  8.   x0=0
  9.   repeat{
  10.     x0 <- x0 +1
  11.     peach(x0,n)
  12.     if(peach(x0,n)%%1==0) break
  13.   }
  14.   c(x0,peach(x0,n))
  15.   
  16. }
复制代码
> monkey(1)
[1] 1 0
> monkey(2)
[1] 3 0
> monkey(3)
[1] 25  6
> monkey(4)
[1] 253  78
> monkey(5)
[1] 3121 1020

帮忙看看有没有什么bug。
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
kk22boy + 1 + 1 + 1 观点有启发
qoiqpwqr + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

7
jmpamao 发表于 2013-10-24 21:56:56
@ qoiqpwqr
发现
  1. x <- 0
  2. repeat{
  3.   x <- x +1
  4.   p <-7/8
  5.   x1 <- p*(x-1)
  6.   x2 <- p*(x1-1)
  7.   x3 <- p*(x2-1)
  8.   x4 <- p*(x3-1)
  9.   x5 <- p*(x4-1)
  10.   x6 <- p*(x5-1)
  11.   x7 <- p*(x6-1)
  12.   x8 <- p*(x7-1)
  13.   
  14.   if(x8%%1==0)
  15.     break
  16.   
  17. }
  18. x
  19. x8
  20. > x
  21. [1] 16777209
  22. > x8
  23. [1] 5764794
复制代码
当猴子数为8时,运算速度开始超慢,
但这 比   monkey写的那个递归函数的速度要快的多,无语!!!!

辛苦写了个monkey函数,还比不上原始的,这可以优化吗?

8
ntsean 发表于 2013-10-25 04:35:54
我怎么觉得这个事数学问题
假设 第n个猴子拿完后每對有x个桃子

那么第n个猴子那之前可以证明有  n^n*(x+1)/(n-1)^(n-1) - n+1
药其为整数 (x+1)/(n-1)^(n-1)必须为整数,所以结果为至少开始有 n^n -n +1 个桃子


n = 5,       3121
n = 8,      16777209
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
nuomin + 1 3120/5=624 不符合题意
jmpamao + 1 + 1 + 1 厉害 厉害!

总评分: 学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

9
yywan0913 在职认证  发表于 2013-10-25 08:57:28
jmpamao 发表于 2013-10-24 21:56
@ qoiqpwqr
发现当猴子数为8时,运算速度开始超慢,
但这 比   monkey写的那个递归函数的速度要快的多,无 ...
x[n+1]=p*(x[n]-(1-p))
你写的好像不对
等于8的时候好像是390621
#y表示桃子数,x[1:n]分表示一到n个猴子,n可随意设置,越大运行越慢
x=c();y=0;n=8
repeat{
  y=y+1
  x[1]=1/5*(y-1)
for(i in 2:n){
   x=1/5*(4*x[i-1]-1)
}
if(x[n]%%1==0) break
}
y
是什么给了你自信

10
jmpamao 发表于 2013-10-25 09:10:05
yywan0913 发表于 2013-10-25 08:57
x[n+1]=p*(x[n]-(1-p))
你写的好像不对
等于8的时候好像是390621
n=8的时候, 不是 1/5了,那是5个猴子,系数要跟着变 1/8

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 10:44