全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3663 16
2016-01-26
某人有100瓶酒,规定4个瓶盖换一瓶,2个空瓶换一瓶,问这个人一共可以得到多少瓶酒?
二维码

扫码加我 拉你入群

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

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

全部回复
2016-1-27 10:51:11
#拥有的酒(以瓶计,不包括瓶盖和瓶身,只代表酒)
liquor <- 0;

#递归函数,输入变量为酒瓶数(包含瓶盖、瓶身)
exchange <- function(wine){
        liquor <<- liquor + wine;
        addedLiquor = floor(wine*(0.25 + 0.5));
        cat("now own liquor number:",liquor,",addedLiquor number:",addedLiquor,"\n");
               
        if(addedLiquor>=1){
                exchange(addedLiquor);
        }
}

#赋初始值,并计算
wine <- 100;
exchange(wine);

#打印结果
cat("total liquor number:" ,liquor,"\n");

输出结果:
now own liquor number: 100 , addedLiquor number: 75
now own liquor number: 175 , addedLiquor number: 56
now own liquor number: 231 , addedLiquor number: 42
now own liquor number: 273 , addedLiquor number: 31
now own liquor number: 304 , addedLiquor number: 23
now own liquor number: 327 , addedLiquor number: 17
now own liquor number: 344 , addedLiquor number: 12
now own liquor number: 356 , addedLiquor number: 9
now own liquor number: 365 , addedLiquor number: 6
now own liquor number: 371 , addedLiquor number: 4
now own liquor number: 375 , addedLiquor number: 3
now own liquor number: 378 , addedLiquor number: 2
now own liquor number: 380 , addedLiquor number: 1
now own liquor number: 381 , addedLiquor number: 0
total liquor number: 381
二维码

扫码加我 拉你入群

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

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

2016-1-27 10:56:15
hongweigg 发表于 2016-1-27 10:51
#拥有的酒(以瓶计,不包括瓶盖和瓶身,只代表酒)
liquor
二维码

扫码加我 拉你入群

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

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

2016-1-27 12:13:26
hongweigg 发表于 2016-1-27 10:51
#拥有的酒(以瓶计,不包括瓶盖和瓶身,只代表酒)
liquor
你这种方法算出结果有问题, 当 wine=5 时可以算得正常结果为15,而你的方法是11
二维码

扫码加我 拉你入群

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

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

2016-1-27 12:14:33
#酒瓶问题
interestproblem <- function (x) {
        a=x;b=a;c=a
        while (b >= 4 | c >= 2) {
          if (b >=4) {
         b1=b-b%%4
         a=a+b1/4
         b=b-b1+b1/4
         c=c+b1/4
         } else {
             if (c >=2 ){
                 c1=c-c%%2
                 a=a+c1/2
                 b=b+c1/2
                 c=c-c1+c1/2
              } else {
              a=a
                b=b
                c=c
              }
            }
      }
      return(data.frame('酒瓶'=a,'瓶盖'=b,'空瓶'=c))
      #return(c(a,b,c))

}
interestproblem(100)


二维码

扫码加我 拉你入群

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

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

2016-1-27 13:04:35
zhou1_20 发表于 2016-1-27 12:13
你这种方法算出结果有问题, 当 wine=5 时可以算得正常结果为15,而你的方法是11
原程序确实有些问题,丢掉了一些未能整换的”零头“,下面进行了修正:

#拥有的酒(以瓶计,不包括瓶盖和瓶身,只代表酒)
liquor <- 0;

#递归函数,输入变量为酒瓶数(包含瓶盖、瓶身)
exchange <- function(wine,bottle,cap){
        liquor <<- liquor + wine;
        tmpBottle <- floor((wine+bottle)*0.5)
        tmpCap <- floor((wine+cap)*0.25)
        addedLiquor = tmpBottle + tmpCap;
        remainingBottle <- (wine+bottle) - tmpBottle*2;
        remainingCap <- (wine+cap) - tmpCap*4;
        cat("now own liquor number:",liquor,", addedLiquor number:",addedLiquor,"\n");
               
        if(addedLiquor>=1){
                exchange(addedLiquor,remainingBottle,remainingCap);
        }
}

#赋初始值,并计算
wine <- 100;
exchange(wine,0,0);

#打印结果
cat("total liquor number:" ,liquor,"\n");

运行结果为:
now own liquor number: 100 , addedLiquor number: 75
now own liquor number: 175 , addedLiquor number: 55
now own liquor number: 230 , addedLiquor number: 42
now own liquor number: 272 , addedLiquor number: 32
now own liquor number: 304 , addedLiquor number: 24
now own liquor number: 328 , addedLiquor number: 18
now own liquor number: 346 , addedLiquor number: 13
now own liquor number: 359 , addedLiquor number: 9
now own liquor number: 368 , addedLiquor number: 8
now own liquor number: 376 , addedLiquor number: 6
now own liquor number: 382 , addedLiquor number: 4
now own liquor number: 386 , addedLiquor number: 3
now own liquor number: 389 , addedLiquor number: 2
now own liquor number: 391 , addedLiquor number: 1
now own liquor number: 392 , addedLiquor number: 2
now own liquor number: 394 , addedLiquor number: 1
now own liquor number: 395 , addedLiquor number: 0
total liquor number: 395

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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