java写扑克上下等分插入洗牌
来源:互联网 发布:浙江师范大学行知学院 编辑:程序博客网 时间:2024/05/01 06:09
原题为:用java写出算法:54张扑克,分成上下两等份洗牌,每次洗牌下面第一张都是相同的(未洗牌起始时的第一张),并且洗牌时都是依次插入一张,问洗多少次可以返回初始值。
其实刚开始看的时候是无法理解题目意思的,看了下面一个回答者(Tim Chen)举了个例子,这个洗牌规则是:
先用简单的8张牌来看,把牌标记为1 2 3 4 5 6 7 8洗牌后变成1 5 2 6 3 7 4 8
这样就好理解了。
我的想法是这样的:java嘛,就强行让他面向对象。(哈哈,这里我的类名和方法名用了中文拼音,勿喷)
建一个扑克类,然后有牌(就是张数和数组),再给他加个洗牌的函数。
方便我们观察,再给他加一个toString方法。
下面扑克类的代码。
<span style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;color:#222222;">public class PuKe{int totalCard ;int poker[];public PuKe(int totalCard){this.totalCard = totalCard;this.poker = new int[totalCard];reset();} public void reset(){for(int i =0;i<totalCard;i++){poker[i] = i ; }}public void xiPai(){int halfCard = totalCard/2;int temArr[] = new int[totalCard];for(int i = 0; i<totalCard;i++){if(i%2==0){temArr[i]= poker[i/2];}else{temArr[i] = poker[halfCard+i/2];}}poker = temArr;}public String toString() {return "TestPoker [totalCard="+ totalCard+ ", poker="+ (poker != null ? arrayToString(poker, poker.length): null) + "]";}private String arrayToString(Object array, int len) {StringBuffer buffer = new StringBuffer();buffer.append("[");for (int i = 0; i < len; i++) {if (i > 0)buffer.append(", ");if (array instanceof int[])buffer.append(((int[]) array)[i]);}buffer.append("]");return buffer.toString();}}</span>
然后在主函数里面调用就好了,代码这样
public class MainClass {public static void main(String[] args) {PuKe puKe = new PuKe(54);int[] pokerCompare = puKe.poker;int count=0;while(!Arrays.equals(pokerCompare,puKe.poker) || count==0){System.out.println(puKe.toString());puKe.xiPai();count++;}System.out.println("这个是第"+count+"洗牌,整副牌为"+puKe.toString());}}
最后输出结果是52次。感觉没有任何算法可言。。算是一道初级题目吧
链接:https://www.zhihu.com/question/50368047/answer/120779895
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
0 0
- java写扑克上下等分插入洗牌
- [java practices] 扑克 洗牌,抽牌
- 扑克洗牌
- 扑克洗牌
- 扑克洗牌
- 扑克 洗牌
- 扑克洗牌
- 扑克牌洗牌问题<用java写出算法:54张扑克,分成上下两等份有规律的洗牌,多少次可以返回初始值>
- 扑克洗牌程序
- 扑克洗牌 [No. 69]
- java直接插入排序(扑克排序)
- 扑克洗牌(乱数排列)
- JAVA课程作业3-生成52张扑克,模拟扑克牌洗牌
- 利用java集合框架写的一个简单扑克游戏
- Java 洗牌
- java 洗牌
- 等分
- 【代码练习3】扑克洗牌发牌升级版
- Linux常用命令总结
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
- 嵌入式中的 *(volatile unsigned int *)理解
- RGB、YUV和YCbCr
- 水平出发和边缘出发的区别
- java写扑克上下等分插入洗牌
- 斯坦福大学深度学习与自然语言处理第一讲:引言
- varinic的模板
- react ajax 加载阻塞
- 第2周项目3-(1)体验复杂度
- select,poll,epoll的归纳总结区分
- Python学习笔记之六——数据结构
- linux NAND驱动之六:NAND驱动的probe流程
- RIP性质的一些理解