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

任务分解:
任务分解的步骤:
将复杂的任务分解为一些简单的子任务;
使用实例;
用通俗的语言描述解决方案,然后将其转换成R代码。
任务分解的种类:有序步骤和同类情况
老虎JI程序任务的初步分解
生成符号组合:
#生成符号组合
get_symbols<-function(){
wheel<-c("DD","","BBB","BB",
"B","C","")
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 \nworld")
cat("hello \nworld")
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\n")
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,"\n")
}
i
for (i in c("你","hao")) {
cat("当前的i值为",i,"\n")
}
#打印每个元素的长度和类
nk<-list(a=c(1,2,1),b=letters[1:4])
for (i in nk) {
cat("i的长度:",length(i),"\nclass:",class(i),"\n")
}
#求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,"\n")
}
#1000到1100,满足的条件是i的平方除以11的余数
#与i的3次方除以17的余数相同,取出i的值
#取余数:%%
9%%4
for (i in 1100:1000) {
if((i^2)%%11==(i^3)%%17){
cat(i,"\n")
break
}
} #next:跳过本次循环
#1到5,跳过3,打印1,2,4,5
for (i in 1:5) {
if(i==3) next
cat("message:",i,"\n")
}
#while循环
#语法结构
while(cond){
expr
}
#当x<=5时,打印x的值
x<-0
while (x<=5) {
cat(x,"\n")
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,"\n")
}
计算中奖金额
#第一种情况:三个符号都相同
#7 7 7
symbol<-rep("",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]=="") 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,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=0) #第三种方式 查找表的方式
if (all(symbol==symbol[1])) {
payout<-c("DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=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("","BB","BBB") %in% c("B","BB","BBB"))
if (all(symbol==symbol[1])) {
payout<-c("DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=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,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=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
R语言-laohuji的更多相关文章
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- R语言环境安装与基本使用
R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- [R]R语言中的%>%和%.%
最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...
- .Net调用R语言
///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...
- 用R语言的quantreg包进行分位数回归
什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言-处理异常值或报错的三个示例
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...
- R语言爬虫初尝试-基于RVEST包学习
注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...
随机推荐
- vue常见问题处理 -- 页面刷新时,如何保持原有vuex中的state信息
一.页面刷新时,如何保持原有vuex中的state信息 页面刷新后,原有的 vuex 中的 state 会发生改变,如果在页面刷新之前,可以将 state 信息保存,页面重新加载时,再将该值赋给 st ...
- OSG绘制空间凹多边形并计算其面积
目录 1. 思路 1) 多边形分格化 2) 几何图元遍历 2. 实现 3. 参考 1. 思路 这个问题其实涉及到OSG中的两个问题:多边形分格化和几何图元遍历. 1) 多边形分格化 在OpenGL/O ...
- zabbix批量清理模板,添加新模板
import requests import json import sys def get_token(): data = { "jsonrpc": "2.0" ...
- 分析Android APK-砸壳-Fdex2
砸壳的工具千千万,但是FDex2 是最有能耐的,我尝试过各种壳,都是秒砸的.特别说明一下,360的壳,oncreated 方法还是空的,但是其他大部分内容还是有的,反正是可以参考一下的. 安装环境: ...
- 拥抱自动化,CODING 2.0 持续集成全新上线
在文章开始前,做一个小调查,在您的软件项目中集成一行新代码平均需要花多长时间? 15 分钟 一小时 半天 一天及以上 注意这里的集成是指将源码放在一起,并验证源码可以作为一个一致.运行可靠的软件的过程 ...
- Os-HackNos-Report
实验主机:Os-hackerNos靶机一台/Kali linux攻击机一台 实验网络:桥接网络 实验目标:获取靶机的Root权限 难易程度:简单 前期工作: 1:下载Virtualbox虚拟化软件(也 ...
- [洛谷P1169][题解][ZJOI2007]午餐
这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i ...
- Vue小练习 02
用table标签渲染下面的数据, 最后一列为总分, 第一列为排名 scores = [ {name: 'Bob', math: 97, chinese: 89, english: 67}, {name ...
- SpringBoot日志原理解析
1.日志框架 小张:开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 : ...
- 并发容器之ConcurrentLinkedQueue
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...


