- 浏览: 318656 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
js调用excel、word打印 -
jyangzi5:
[u][/u]引用
常见hibernate面试题 -
wangv:
<code="java">Sy ...
常见hibernate面试题 -
bardo:
建议看看这一个
http://bardo.iteye.com ...
金额数字转中文大写 -
dotjar:
在继续讲解HQL其他更为强大的查询功能前,我们先来讲解以下利用 ...
常见hibernate面试题
记得小时候看到别人玩的一个游戏,给他一定个数有大小次序的扑克牌,指定每次置底的个数,经过他调整次序后,可以先置底再出一张牌,依此类推,直到扑克牌全部出来,可以实现从大到小或者从小到大一个个出来,是怎么出来的呢?当时觉得很神奇,长大后经过思考和查阅知道了方法,并用几种算法实现了!
以下是用java实现的程序:
A,2,3,4,5..J,Q,K,13张扑克牌,从上面拿一张放在最下面(重复n次,默认n=1),再从上面拿一张出来显示,重复此操作,要求出来的顺序是:A,2,3,4,5..J,Q,K
要求的是给出定义规则后初始的扑克牌顺序!
以下是用java实现的程序:
/** * 功能说明:扑克牌游戏,先出一张牌后置一张牌到底部,依次类推 * 使其按1 2 3 4顺序出列 * 采用逆推法和改错法 */ package com.mcfeng.base; /** * @author microjava * * 2008-12-29上午12:46:15 * */ public class Pukepai { private final static int PAI_NUM = 13; /** * @param args */ public static void main(String[] args) { // 测试 // System.out.println(adNum(13)); // 排序第一个参数为牌的个数,第二个参数为置底个数(目前只支持1)第三个参数0代表先出牌1代表先置底 sort(13, 1, 0); //逆推法 sortByNitui(13,3,true); //唐粒子的方法 /*int num = 3; while(num++ < 1000) { sort(num, 1, 0); sortByTang(num); } */ } /** * 得出 n + n/2 + n/4 + ... + 1 的和 有小数的补整 */ public static int adNum(int n) { int m = 0; for (int i = n; i > 0;) { // System.out.println(i); m += i; if (i == 1) break; if (i % 2 == 0) i = i / 2; else i = (i / 2) + 1; } return m; } /** * 改错法 * 扑克牌排序,三个参数的意思分别为: paiNum牌个数 hNum每次置地步牌的个数 l出牌或置底顺序(0为先出牌,1为先置底) */ public static int[] sort(int paiNum, int hNum, int l) { if(paiNum <= 1) { int [] res = {1}; return res; } int total = adNum(paiNum); int[] a = new int[total]; // 初始的加长数组 可以存放置底的牌 长度由 n + n/2 + // n/4 + ... + 1得出 int[] b = new int[paiNum]; // 逆推序列数组 int[] c = new int[paiNum]; // 正确顺序数组 //初始化数组 for (int i = 0; i < paiNum; i++) { a[i] = i + 1; } //按照规则排序 int st = 0; //定义起点 int bj = 0; //逆推序列数组标号 int aj = paiNum; //加长存放起始标号 while(true) { b[bj++] = a[st++]; if(a[st + 1] == 0) { b[bj] = a[st]; break; } a[aj++] = a[st++]; } //由逆推序列得出正确序列 for (int i = 0; i < b.length; i++) { c[b[i] - 1] = i + 1; } System.out.println("改错法排出的序列"); for (int i : c) { System.out.print(i + " "); } return c; } /** * 逆推法 * 扑克牌排序,三个参数的意思分别为: paiNum牌个数 * hNum每次置地步牌的个数 flag出牌或置底顺序(true为先出牌,false为先置底) * */ public static int[] sortByNitui(int paiNum,int hNum,boolean flag) { int[] a = new int[paiNum]; //初始数组 int[] b = new int[paiNum]; //正确数组 //初始化序列 for (int i=0;i<paiNum;i++) { a[i] = paiNum - i; } int ed = paiNum - 1,st = 0; //逆推排序 一张牌置底的时候 /*while(ed >= 0) { b[ed] = a[st]; if(ed == 0 && l == 0) break; if(ed < paiNum - 1) { int temp =b[paiNum - 1]; for(int i = paiNum - 2;i >= ed;i--) { b[i + 1] = b[i]; } b[ed] = temp; } st++; ed--; }*/ //逆推排序 两张牌置底的时候 int[] temp = new int[hNum]; while(ed >= 0) { b[ed] = a[st]; if(ed == 0 && flag) break; if(ed >= paiNum - hNum && ed < paiNum -1 && hNum > 2) { int temphNum = hNum%(st + 1); for(int i = 0;i< temphNum; i++) { temp[i] = b[paiNum - i -1]; } for(int i = paiNum - 1 - temphNum;i >= ed;i--) { b[i + temphNum] = b[i]; } for(int i =0;i<temphNum;i++) { b[ed + i] = temp[temphNum - i - 1]; } } else if(ed < paiNum - hNum) { for(int i = 0;i< hNum; i++) { temp[i] = b[paiNum - i -1]; } for(int i = paiNum - 1 - hNum;i >= ed;i--) { b[i + hNum] = b[i]; } for(int i =0;i<hNum;i++) { b[ed + i] = temp[hNum - i - 1]; } } st++; ed--; } /*System.out.println("\n逆推法排出的序列:"); for (int i : b) { System.out.print(i + " "); }*/ return b; } /** * 唐粒子的方法 */ public static void sortByTang(int num) { int sum, j = 0, k = num; int head = 0, tail = 0; System.out.println(); sum = adNum(k); System.out.println(sum); head = 0; tail = k; int[] init = new int[sum]; System.out.println("init:" + sum); //初始化 for (int i = 0; i < k; i++) init[i] = i + 1; for (int i = 0; i < k; i++) { System.out.print(init[i]); System.out.print(" "); } int[] a = new int[k + 1]; while (head != tail) { a[j++] = init[head]; if (head + 1 == tail) { //a[j] = init[tail]; break; } init[tail++] = init[head + 1]; head += 2; } System.out.println(); System.out.println("after del:"); for (int i = 0; i < j; i++) { System.out.print(a[i]); System.out.print(" "); } int[] out = new int[k]; for (int i = 0; i < k; i++) out[a[i] - 1] = i + 1; System.out.println(); System.out.println("result:"); for (int i = 0; i < k; i++) { System.out.print(out[i]); System.out.print(" "); } } }
评论
2 楼
microjava
2009-11-04
junlas 写道
不明白这个游戏是什么意思?楼主能再解释的详细点吗。。
A,2,3,4,5..J,Q,K,13张扑克牌,从上面拿一张放在最下面(重复n次,默认n=1),再从上面拿一张出来显示,重复此操作,要求出来的顺序是:A,2,3,4,5..J,Q,K
要求的是给出定义规则后初始的扑克牌顺序!
1 楼
junlas
2009-11-04
不明白这个游戏是什么意思?楼主能再解释的详细点吗。。
发表评论
-
JSP禁用缓存常用方法
2013-10-24 09:14 847JSP禁用缓存常用方法 jsp页面禁止缓存设置 1.客户端 ... -
Java操作excel的综合应用(jxl)
2011-04-19 10:28 2204根据excel模板生成excel报表文件--用于报表打印 j ... -
抽象工厂模式
2011-03-18 15:16 1016抽象工厂模式中的有以 ... -
单实例Singleton设计模式
2011-03-10 10:29 1137单实例Singleton设计模式 ... -
JAVA获取服务器路径
2010-09-28 20:36 3611获取服务器路径 在JSF环境中获取到ServletConte ... -
模拟随机发牌
2010-08-17 19:47 1347public void testinit(){ ... -
java web 标签.CHM
2010-08-17 19:26 892Struts2、Struts1、jstl、jsf、spring ... -
java反编译器
2010-08-11 17:38 1048java反编译器 -
金额数字转中文大写
2010-08-07 13:31 1444金额数字转中文大写 处理能力: 整数部分:99999999 ... -
获取指定路径下的所有文件
2010-07-23 16:24 1154package test; import java. ... -
已知最大值的高效排序算法
2010-06-10 10:54 1144有一组数据3,5,9,7,4,13,15,0,2,20.已知最 ... -
错误页面跳转解决办法
2010-06-09 15:50 1368错误页面跳转解决办法 在web.xml中配置错误页面跳转如下 ... -
web系统图标资源
2009-12-21 16:04 1297http://open-open.com/ajax/ajax2 ... -
Think in java3(中文完整版)
2009-12-17 23:09 1133Think in java3(中文完整版) -
用jar命令将Web应用打包成war文件的简单方法
2009-12-17 17:16 1323假定有一个Web应用:C:\myHome myHome/WE ... -
JAVA编程思想
2009-12-15 14:14 816JAVA编程思想 -
Java调用dll实现des加密解密
2009-12-10 16:42 3148package com.srcb.common; p ... -
Java开发--常用网站
2009-11-12 11:13 8471.jar查找: http://www.findjar.com ... -
指定目录输出日志(根据日期和操作员信息)
2009-11-09 14:24 1102package com.microjava.log; ... -
趣味题笔记
2009-10-29 19:29 990一个农夫养了一头牛, ...
相关推荐
在本文中,我们将深入探讨如何使用Java编程语言来实现一个扑克牌游戏。对于初学者来说,这是一个很好的项目,因为它涵盖了面向对象编程、数据结构、算法和游戏逻辑等多个核心概念。 首先,我们需要创建一个扑克牌的...
《21点扑克牌游戏(C#源码)》是一款基于C#编程语言开发的桌面游戏,旨在模拟经典的21点玩法。21点,又称“黑杰克”,是一种流行的纸牌游戏,玩家与庄家进行对弈,目标是使手中的牌点数最接近21点,但不能超过21点。...
在现代社会中,随着社会的快速发展,人们对休闲娱乐越来越重视,又由于电脑的快速发展,“21点”纸牌游戏逐渐成为人们的娱乐的一种方式,编写程序实现游戏,该程序是模拟古老的21点扑克牌游戏,实现1对1的人机大战。...
在Java编程中,设计一个扑克牌游戏涉及到许多关键概念,如对象封装、枚举类型、集合框架以及排序算法。以下是对这些知识点的详细说明: 首先,我们从标题和描述出发,"java算法——玩家扑克牌"表明我们需要创建一个...
在本项目中,我们主要探讨的是使用Python编程语言实现的一款名为《升级》的扑克牌游戏。这款游戏具有完整的用户界面(UI)、人工智能(AI)玩家以及裁判监督系统,为用户提供了一个全面的游戏体验。以下是对各模块的...
21点扑克牌游戏,也称为“Blackjack”,是一种广受欢迎的纸牌游戏,源于18世纪的法国,现在已经成为全球各大赌场的经典游戏之一。它以其简单易懂的规则和策略性吸引了众多爱好者。 在这款游戏中,玩家将与庄家进行...
这个游戏可能包括多种玩法,比如德州扑克、斗地主或者扑克牌接龙等。下面将详细探讨相关知识点。 1. **数据结构与算法**: - **牌堆(Deck)**:首先,我们需要创建一个数据结构来表示扑克牌堆,通常用数组或链表...
总的来说,"Android扑克牌猜点小游戏"是一个集成了Android编程基础、数据结构、算法和用户交互设计的综合项目。对于初学者来说,这是一个很好的实践平台,可以帮助他们巩固基础知识,提升实际开发能力。而对于资深...
拱猪扑克牌游戏的玩法源自西方,是一种四人对局的策略型纸牌游戏。在游戏中,玩家的目标是尽可能收集分数,同时避免被其他对手"拱"出分数。每一轮中,玩家需要根据手中的牌来决定是否跟牌,并尝试获得特定的牌组以...
### Java扑克牌24点算法解析 #### 一、算法背景与目标 24点游戏是一种数字游戏,玩家需要利用给定的四个数字通过加、减、乘、除(可加括号)来使得最终计算结果等于24。在本算法实现中,使用Java语言编写了一个简单...
【标题】"扑克牌游戏源码"所涉及的知识点主要集中在以下几个方面: 1. **编程语言:DELPHI** DELPHI是一种基于Object Pascal的可视化编程环境,它以其高效性和强大的Windows应用程序开发能力而闻名。在这款扑克牌...
翻扑克游戏,通常被称为“对对碰”或“记忆翻牌”,是一种常见的休闲益智游戏。在这个游戏中,玩家需要在二维的游戏板上翻转一对隐藏的扑克牌,如果它们是相同的图案,则会被消除,直到所有牌都被匹配并消除。这种...
下面将详细讨论这款基于Matlab的扑克牌游戏的设计与实现。 首先,我们要理解APP设计模块的核心概念。Matlab的App Designer提供了一个直观的拖放式界面,用于构建GUI(图形用户界面)。通过这个界面,开发者可以添加...
根据给定的信息,我们可以提取并总结出以下与“扑克牌游戏用C++实现”相关的知识点: ### 一、项目背景及目的 此项目是利用C++语言开发的一个扑克牌游戏程序。通过源代码的公开分享,能够让学习者深入了解C++在...
在Java编程领域,开发一款扑克牌游戏是一种常见的实践项目,旨在提升编程技能,尤其是面向对象设计和游戏逻辑处理。在这个名为"java 扑克牌游戏"的项目中,我们可以深入探讨以下几个关键知识点: 1. **面向对象编程...
在本项目中,"Java实现简单的扑克牌游戏(无bug,能正常运行)"是一个针对初学者设计的教学实例,旨在帮助他们理解Java编程语言以及如何利用数据结构来模拟实际问题,比如游戏规则。这个项目包括了洗牌、发牌等基本...
在本项目中,"用Java开发的扑克牌游戏程序源代码"是一个基于Java编程语言实现的扑克牌游戏软件。这个游戏程序展示了如何运用Java的核心概念和技术来构建一个完整的、交互式的娱乐应用。以下是对该项目涉及的一些关键...
在这个“数据结构课程设计:扑克牌游戏”项目中,我们主要关注的是如何使用数据结构来实现一个扑克牌游戏。这个项目涵盖了多个IT领域的关键知识点,包括数据结构的选择、算法设计以及软件工程的基本实践。 首先,从...