• R语言-laohuji


    项目三-tiger机

    说明:每玩一次老ji游戏需要花费一元钱。钻石符号(DD)可以百搭,并且能够将最终的金额加倍。

     

    任务分解:

    任务分解的步骤:
    将复杂的任务分解为一些简单的子任务;
    使用实例;
    用通俗的语言描述解决方案,然后将其转换成R代码。
    任务分解的种类:有序步骤和同类情况
    老虎JI程序任务的初步分解

    生成符号组合:

    #生成符号组合
    get_symbols<-function(){
      wheel<-c("DD","7","BBB","BB",
               "B","C","0")
      sample(wheel,size = 3,replace = T,
             prob = c(0.03,0.03,0.06,0.1,
                      0.25,0.01,0.52))
    }
    get_symbols()

    显示符号组合

    #显示符号组合
    print("hello 
    world")
    cat("hello 
    world")
    print(get_symbols())

    #分支语句

    > 
    > #if、ifelse、switch
    > #if:主要处理单个的逻辑条件
    > #如果一个数值小于0,取他的绝对值
    > qz<-function(x){
    +   if(x<0){
    +     abs(x)
    +     -x
    +   }
    + }
    > qz(-9)
    [1] 9
    > #如果一个数值大于0,返回1,如果小于0,
    > #返回-1,如果等于0,返回0
    > jc<-function(x){
    +   if(x>0){
    +     return(1)
    +   }else if(x<0){
    +     return(-1)
    +   }else{
    +     return(0)
    +   }
    + }
    > jc(9)
    [1] 1
    > jc(-9)
    [1] -1
    > jc(0)
    [1] 0
    > jc1<-function(x){
    +   if(x>0) 1 else if(x<0)-1 else 0
    + }
    > jc1(9)
    [1] 1
    > jc1(-9)
    [1] -1
    > jc1(0)
    [1] 0
    > dj<-function(x){
    +   if(x>=90){
    +     "A"
    +   }else if(x>=80){
    +     "B"
    +   }else if(x>=70){
    +     "C"
    +   }else if(x>=60){
    +     "D"
    +   }else "F"
    + }
    > dj(60)
    [1] "D"
    > dj(50)
    [1] "F"
    

    ifelse:可以处理一个向量

    > #ifelse:可以处理一个向量
    > jc2<-function(x){
    +   ifelse(x>0,1,-1)
    + }
    > jc2(c(3,-7))
    [1]  1 -1
    > #练习:如果x>0,返回x本身,
    > #如果x<0,取它的绝对值
    > jc3<-function(x){
    +   ifelse(x>0,x,abs(x))
    + }
    > jc3(c(3,-3))
    [1] 3 3
    > abs(-3:3)
    [1] 3 2 1 0 1 2 3
    > #如果一个数值大于5,就返回5,
    > #如果-5到5之间,保持本身不变
    > #如果小于-5,返回-5
    > jc4<-function(x){
    +   ifelse(x>5,5,ifelse(x>=-5,x,-5))
    + }
    > jc4(-2)
    [1] -2

    #pmax、pmin

    pmax(c(3,8,9),c(1,9,7))
    [1] 3 9 9
    > pmin(c(3,8,9),c(1,9,7))
    [1] 1 8 7
    > jc5<-function(x){
    +   pmax(-5,pmin(5,x))
    + }
    > jc5<-function(x){
    +   pmin(5,pmax(-5,x))
    + }
    > jc5(c(-3,6))
    [1] -3  5

    switch

    #switch:针对一个数字或者一个字符串来选择性的
    #执行某些语句
    switch(1,"x","y")
    switch(2,"x","y")
    switch(3,"x","y")
    switch("a",a=1,b=2)
    switch("c",a=1,b=2)
    switch("c",a=1,b=2,3)
    switch("d",a=1,b=2,3)
    switchf<-function(x){
      switch(x,
             a=1:3,
             b=list(x=0,y=1),
             c={
               cat("你选择了c
    ")
               list(name="c",value="haha")
              })
    }
    switchf("a")
    switchf("b")
    switchf("c")

    #循环:for、while、repeat

    #for循环
    #语法结构:
    for (variable in vector) {
      expr
    }
    for (i in 1:3) {
      cat("当前的i值为",i,"
    ")
    }
    i
    for (i in c("","hao")) {
      cat("当前的i值为",i,"
    ")
    }

    #打印每个元素的长度和类
    nk<-list(a=c(1,2,1),b=letters[1:4])
    for (i in nk) {
      cat("i的长度:",length(i),"
    class:",class(i),"
    ")
    }
    #求1到100的和
    sum(1:100)
    s<-0
    for (i in 1:100) {
      s<-s+i
    }
    s

    #管理for循环:break、next

    #管理for循环:break、next
    #break:终止循环
    #1到5,遇到3时终止,打印1和2
    for (i in 1:5) {
      if(i==3) break
      cat("message:",i,"
    ")
    }
    #1000到1100,满足的条件是i的平方除以11的余数
    #与i的3次方除以17的余数相同,取出i的值
    #取余数:%%
    9%%4
    for (i in 1100:1000) {
      if((i^2)%%11==(i^3)%%17){
        cat(i,"
    ")
        break
      }
    }
    
    #next:跳过本次循环
    #1到5,跳过3,打印1,2,4,5
    for (i in 1:5) {
      if(i==3) next
      cat("message:",i,"
    ")
    }

    #while循环

    #语法结构
    while(cond){
      expr
    }
    #当x<=5时,打印x的值
    x<-0
    while (x<=5) {
      cat(x,"
    ")
      x<-x+1
    }
    #x从0开始,自增加1,当x=2时,执行下一次
    #循环,当x=4时,终止循环
    x<-0
    repeat{
      x<-x+1
      if(x==2) next
      else if(x==4) break
      else cat(x,"
    ")
    }

    计算中奖金额

    #第一种情况:三个符号都相同
    #7 7 7 
    symbol<-rep("7",3)
    #第一种方法
    symbol[1]==symbol[2]&symbol[2]==symbol[3]
    #第二种方法
    unique(symbol)
    length(unique(symbol))==1
    #第三种方法
    all(symbol==symbol[1])
    
    #3个相同情况下: 第一种方式
    if (all(symbol==symbol[1])) {
      if(symbol[1]=="DD") prize<-100
      else if(symbol[1]=="7") prize<-80
      else if(symbol[1]=="BBB") prize<-40
      else if(symbol[1]=="BB") prize<-25
      else if(symbol[1]=="B") prize<-10
      else if(symbol[1]=="C") prize<-10
      else prize<-0
    }
    prize
    
    #第二种方式:
    switch(symbol[1],"DD"=100,"7"=80,"BBB"=40,
           "BB"=25,"B"=10,"C"=10,"0"=0)
    
    #第三种方式 查找表的方式
    if (all(symbol==symbol[1])) {
      payout<-c("DD"=100,"7"=80,"BBB"=40,
                "BB"=25,"B"=10,"C"=10,"0"=0)
      prize<-unname(payout[symbol[1]])
    }
    prize
    # 去掉名称unname
    unname(payout[symbol[1]])
    payout[[symbol[1]]]

    第二种情况:全是杠

    #第二种情况:全是杠
    #B BB B
    symbol<-c("B","BB","BBB")
    all(c("7","BB","BBB") %in% c("B","BB","BBB"))
    if (all(symbol==symbol[1])) {
      payout<-c("DD"=100,"7"=80,"BBB"=40,
                "BB"=25,"B"=10,"C"=10,"0"=0)
      prize<-unname(payout[symbol[1]])
    }else if(all(symbol %in% c("B","BB","BBB"))){
      prize<-5
    }

     第三种情况:计算樱桃的数量

    symbol<-c("C","BB","BBB")
    sum(symbol=="C")
    if (all(symbol==symbol[1])) {
      payout<-c("DD"=100,"7"=80,"BBB"=40,
                "BB"=25,"B"=10,"C"=10,"0"=0)
      prize<-unname(payout[symbol[1]])
    }else if(all(symbol %in% c("B","BB","BBB"))){
      prize<-5
    }else {
      yt<-sum(symbol=="C")
      prize<-c(0,2,5)[yt+1]
    }
    
    if(yt==0){
      prize<-0
    }else if(yt==1){
      prize<-2
    }else if(yt==2){
      prize<-5
    }
    prize

  • 相关阅读:
    HDU 1068
    hdu6447
    HDU 6438
    网络赛的个人反思总结
    Bellman-ford 模板
    Pairs Forming LCM LightOJ
    POJ
    链式前向星
    POJ 3281 Dining
    游标遍历所有数据库循环执行修改数据库的sql命令
  • 原文地址:https://www.cnblogs.com/foremostxl/p/12051183.html
Copyright © 2020-2023  润新知