导航:首页 > 编程语言 > 判断顺子php

判断顺子php

发布时间:2023-10-07 00:11:20

㈠ 用java如何判断扑克牌同花顺

扑克牌有两个属性,花色和牌面大小,可以分别比较花色和牌面大小是否递增或递减来确定是不是同花顺.但是由于扑克牌会有JQKA,所以牌面大小最好以数组或者字符串的方式实现,通过比较下标来比较大小,以下是大概的代码

publicclassPuKe{
privateStringcolor;
privateStringnum;
publicStringgetColor(){
returncolor;
}
publicvoidsetColor(Stringcolor){
this.color=color;
}
publicStringgetNum(){
returnnum;
}
publicvoidsetNum(Stringnum){
this.num=num;
}

publicPuKe(Stringcolor,Stringnum){
super();
this.color=color;
this.num=num;
}
publicstaticvoidmain(String[]args){
List<PuKe>card=newArrayList<PuKe>();
card.add(newPuKe("black","2"));
card.add(newPuKe("black","3"));
card.add(newPuKe("black","4"));
card.add(newPuKe("black","5"));
card.add(newPuKe("black","6"));
//这里因为10是两位数且牌面里面用不到1,所以直接用1代替10
Stringcheck="234567891JQKA";
booleanflage=true;
//自定义比较器,用num在check里的下标大小作为比较依据排序
Collections.sort(card,newComparator<Object>(){
@Override
publicintcompare(Objecto1,Objecto2){
PuKeer1=(PuKe)o1;
PuKeer2=(PuKe)o2;
Integerorg1=(int)(er1.getNum()==null?0.0:check.indexOf(er1.getNum()));
Integerorg2=(int)(er1.getNum()==null?0.0:check.indexOf(er2.getNum()));
returnorg1.compareTo(org2);
}
});
for(inti=0;i<card.size()-1;i++){
//遍历所有的牌,如果颜色不一样直接跳出循环,不是同花顺
if(!card.get(i).getColor().equals(card.get(i+1).getColor())){
flage=false;
break;
}
//如果上一张减去下一张的差值不是1,说明牌面不是顺子,也不是同花顺,跳出循环
if((int)check.indexOf(card.get(i+1).getNum())-(int)check.indexOf(card.get(i).getNum())!=1){
flage=false;
break;
}
}
if(flage){
System.out.println("牌面是同花顺");
}else{
System.out.println("牌面不是同花顺");
}
}
}

不过这种方法唯一不好的地方是check中不能直接用10,将来展示的时候需要判定,展示的是1时直接改成10.

其实实现方法很多,我这么写是因为最近在复习,这么写用到的知识点相对会多一点.

php中高级面试题 – 第二天

一、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点

二、从扑克牌中随机抽出 5 张牌,判断是不是一个顺子,即这5张牌是连续的

这个问题有个关键点,扑克牌,1-13 不能再多了。这就很简单了。用PHP来做,定义一个数组分别存着1到13, 拿出一个,置空一个,最后看下这五个置空的 是不是连续的。这种情况不考虑抽出的顺序。

三、说一下 PHP 的(内存)垃圾回收机制

每一个变量对应一个 zval 数据结构,在该结构内还有一个 val 结构体,该结构体内有一个引用计数(php7 而言,对于 php5,这个引用计数是保存在 zval 结构中的),标识该对象的引用数,当对象的引用计数为 0 时代表这个对象可被回收。

对象的 refcount 减少的时机:修改变量、函数返回(释放局部变量)、unset 变量

对于数组和对象而言,可能存在变量中的成员引用变量本身的情况,也就是循环引用,这样会造成这个变量永远不会被内存回收,而成为垃圾。

PHP 里对于这种情况给出了垃圾回收机制:如果数组、对象的引用计数减少而且不为零,则认为他们可能是垃圾,把他们放到垃圾收集器里。等垃圾收集器到了一定的数量之后,进行垃圾处理:对所有可能的垃圾 refcount 减 1,如果为 1,说明是垃圾,则进行内存回收;如果不为 1,说明还有其他变量在使用,refcount 重新加 1;这种对象复用以及垃圾回收机制在其他语言中也有体现:redis 中也使用了引用计数表示每个对象的引用数量。

四、简述一下PHP短信验证码如何防刷?

1、时间限制:60 秒后才能再次发送

从发送验证码开始,前端(客户端)会进行一个 60 秒的倒数,在这一分钟之内,用户是无法提交多次发送信息的请求的。这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送短信验证码。

2、手机号限制:同一个手机号,24 小时之内不能够超过 5 条

对使用同一个手机号码进行注册或者其他发送短信验证码的操作的时候,系统可以对这个手机号码进行限制,例如,24 小时只能发送 5 条短信验证码,超出限制则进行报错(如:系统繁忙,请稍后再试)。然而,这也只能够避免人工手动刷短信而已,对于批量使用不同手机号码来刷短信的机器,这种方法也是无可奈何的。

3、短信验证码限制:30 分钟之内发送同一个验证码

网上还有一种方法说:30 分钟之内,所有的请求,所发送的短信验证码都是同一个验证码。第一次请求短信接口,然后缓存短信验证码结果,30 分钟之内再次请求,则直接返回缓存的内容。对于这种方式,不是很清楚短信接口商会不会对发送缓存信息收取费用,如果有兴趣可以了解了解。

4、前后端校验:提交 Token 参数校验

这种方式比较少人说到,个人觉得可以这种方法值得一试。前端(客户端)在请求发送短信的时候,同时向服务端提交一个 Token 参数,服务端对这个 Token 参数进行校验,校验通过之后,再向请求发送短信的接口向用户手机发送短信。

5、唯一性限制:微信产品,限制同一个微信 ID 用户的请求数量

如果是微信的产品的话,可以通过微信 ID 来进行识别,然后对同一个微信 ID 的用户限制,24 小时之内最多只能够发送一定量的短信。

6、产品流程限制:分步骤进行

例如注册的短信验证码使用场景,我们将注册的步骤分成 2 步,用户在输入手机号码并设置了密码之后,下一步才进入验证码的验证步骤。

7、图形验证码限制:图形验证通过后再请求接口

用户输入图形验证码并通过之后,再请求短信接口获取验证码。为了有更好的用户体验,也可以设计成:一开始不需要输入图形验证码,在操作达到一定量之后,才需要输入图形验证码。具体情况请根据具体场景来进行设计。

8、IP 及 Cookie 限制:限制相同的 IP/Cookie 信息最大数量

使用 Cookie 或者 IP,能够简单识别同一个用户,然后对相同的用户进行限制(如:24 小时内最多只能够发送 20 条短信)。然而,Cookie 能够清理、IP 能够模拟,而且 IP 还会出现局域网相同 IP 的情况,因此,在使用此方法的时候,应该根据具体情况来思考。

9、短信预警机制,做好出问题之后的防护

以上的方法并不一定能够完全杜绝短信被刷,因此,我们也应该做好短信的预警机制,即当短信的使用量达到一定量之后,向管理员发送预警信息,管理员可以立刻对短信的接口情况进行监控和防护。

五、mySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据

相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6 种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db [i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db [i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db [i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db [i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db [i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

㈢ 如何用c语言编程,判断一个三位数是否为顺子(不是顺子直接提示出错)

#include<stdio.h>

int main()

{

int n,a,b,c;

scanf("%d",&n);

a=n%10;//个位

b=n%100/10;//十位

c=n/100;//百位

if((a+2==b+1&&b+1==c)||(a==b+1&&b+1==c+2))

printf("该数是顺子");

else

printf("输入错误");

return 0;

}

希望能帮到你,望采纳;

㈣ 求用c语言或c++,编写判断五张扑克是同花顺等类型的问题。

分成两类判断:
1、是不是同花
2、判断类型
‍ ‍ 判断过程:1.进行排序--->2.排序后进行相邻的两两相减--->3.在每次相减的时候对结果进行记录--->若只有一个0,则为一对;2个连续0则为三条;2个不连续的0则为三两对;3个连续的0则为四条;3个不连续的0则为三带一对;4个1则为顺子;否则为杂牌。
然后结合是否为同花得出最后结果。
希望能帮到你

阅读全文

与判断顺子php相关的资料

热点内容
光遇为什么之前没有安卓服 浏览:745
移动硬盘显示可用加密 浏览:944
python万能库开发 浏览:875
向日葵远程解压 浏览:883
androidedittext布局 浏览:320
题库管理app哪个好用 浏览:989
安卓游戏中亮度自动调节如何关闭 浏览:892
求派算法 浏览:551
pythonweb编程实例 浏览:190
鞋盒怎么做文件夹收纳盒视频 浏览:757
模拟电子技术第四版pdf 浏览:961
解压车贷后gps怎么找 浏览:352
源码数据库怎么配备 浏览:138
知乎程序员小灰 浏览:574
新概念英语第一册书pdf 浏览:8
安卓ans文件怎么打开 浏览:895
选择题改进分治算法的方法有 浏览:110
下载云服务器有什么好处 浏览:23
江苏机架式服务器云主机 浏览:411
linux补全命令 浏览:514