魔术师发牌问题--java实现
package com.wyl.linklist;
/**
**问题名称:魔术师发牌问题
*问题描述:魔术师手里一共有13张牌,全是黑桃,1~13.
*********魔术师需要实现一个魔术:这是十三张牌全部放在桌面上(正面向下),
********第一次摸出第一张,是1,翻过来放在桌面上。
******第二次摸出从上往下数第二张,是2,翻过来 放在桌面上,(第一张放在最下面去,等会儿再摸),
*****第三次摸出从上往下数第三张,是3,翻过来放在桌面上,(第一张和第二张 放在最下面去,等会儿再摸)
*** 以此类推 最后一张就是13
*
* 方法:
* 1、创建一个长度为13的单向循环链表,链表中值全部存0
* 2、遍历链表进行修改值
* @author wyl
*
*/
public class MagicCord { private Node head; //定义链表的头结点 /**
* 创建链表中的Node类
*/
class Node{
private Integer data;
private Node next; public Node(){ }
public Node(Integer data){
this(data, null);
}
public Node(Integer data, Node next) {
this.data = data;
this.next = next;
} public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
/**
* 构造函数中直接初始化长度为13的循环链表
* 第一个节点的值默认为1
*/
public MagicCord(){
head = new Node(1);
Node p = head ;
int i = 1;
while(p.next == null && i < 13){
Node newNode = new Node(0);
p.next = newNode;
p = p.next;
i++;
}
p.next = head; //构建循环链表
}
//打印循环链表
public void print(){
Node p = head;
int i = 0;
while(i++<13){
System.out.print(p.data + "、");
p = p.next ;
}
} //循环修改节点的值
public void magic(){
int i = 2; //从2开始存数字到13
Node p = head; //指针p指向head,用来控制每次指针移动的下一个位置
for(;i<=13;i++){
for(int j = 0; j<i; j++){
p = p.next;
if(p.data != 0){
j--;
}
}
p.data = i;
}
} public static void main(String[] args) {
MagicCord magicCord = new MagicCord();
magicCord.print();
magicCord.magic();
System.out.println();
magicCord.print();
}
}
魔术师发牌问题--java实现的更多相关文章
- 魔术师发牌问题 -- python实现
问题描述 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来, ...
- javaSE第十八天
第十八天 192 1:Map(掌握) 192 (1)定义: 192 (2)Map和Collection的区别? 192 (3)Map接口功能概述(自己补齐) 192 A: ...
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java基础知识强化之集合框架笔记71:模拟斗地主洗牌和发牌并对牌进行排序的案例
1. 模拟斗地主洗牌和发牌并对牌进行排序的原理图解: 2. 代码实现: 思路: • 创建一个HashMap集合 • 创建一个ArrayList集合 • 创建花色数组和点数数组 • 从0开始往HashM ...
- Java基础知识强化之集合框架笔记70:模拟斗地主洗牌和发牌(ArrayList)
1. 模拟斗地主洗牌和发牌 分析: A:创建一个牌盒 B:装牌 C:洗牌 D:发牌 E:看牌 2. 代码实现: package cn.itcast_03; im ...
- Java学习之利用集合发牌小练习
/* * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌同时往Arra ...
- JAVA 实现发牌的 改进
java是一门面向对象的语言,我们在解决这个问题的时候先找对象.我认为面想对象 “就是把复杂的问题变简单,简单的问题程序化” .如果我们 创建一盒牌--->洗牌--->选地主牌---&g ...
- Java模拟斗地主发牌和洗牌
package cn.itcast_04; import java.util.ArrayList; import java.util.Collections; import java.util.Has ...
随机推荐
- hctf2016 fheap学习(FlappyPig队伍的解法)
目录 漏洞原理 二次释放 如何在第二次释放前修改函数地址 fastbin的特性 修改函数指针流程 如何获得进程的加载基址 格式化字符串漏洞 确定printf函数在代码段中偏移 printf函数输出想要 ...
- JavaScript获取地址栏内容
例如地址为:http://www.mazey.net/baby/blog/index.php?a=1&b=2#c var query = window.location.href; //htt ...
- 小程序 欢迎页面 navigateTo和tabBar不能同时指向一个路径
小程序navigateTo和tabBar不能同时指向一个路径 wx.navigateTo和wx.redirectTo不允许跳转到tabBar页面,只能用wx.switchTab跳转到tabBar页面. ...
- IIS 6.0上部署.NET 4.0网站
最近需要把VS2010开发的网站部署到Windows Server 2003的服务器上去, Windows Server 2003操作系统自带的为IIS 6.0,IIS 6.0一般只支持.NET 2. ...
- Use Private Members from Base Class
最近看了一段代码:在导出类中调用继承自基类的某个public函数,该函数中对基类中的private数据成员 进行了赋值并将结果打印.看到程序的运行结果后,顿时感觉自己之前(我之前的理解这里就不说明了) ...
- comet4j开发指南
http://blog.csdn.net/majian_1987/article/details/8489738 好多朋友反映,因排版问题,文章部分边缘内容无法查看.尝试过排版,但仍无法显示正常,所以 ...
- Xamarin简介与Xamarin支持MVC设计模式
Create Native iOS, Android,Mac and Windows apps in C#. 官方网站:http://xamarin.com/ 使用武器 Run a C# app, g ...
- jq .attr()和.prop()方法的区别
今天在nodejs交流群里面遇到别人在里面说面试的时候遇到了这个问题,没回答出来,面试官讲的他也不明白,这个问题看着很简单,但是往深的解释就很难了. 对于HTML元素本身就带有的固有属性,在处理时,使 ...
- windows简单使用etcd
一.下载安装选择版本 https://github.com/coreos/etcd/releases 二.解压 三.首先开启etcd 1.进入在etcd解压的目录中 2.etcd.exe 没有erro ...
- Redis 高级实用特性
1.安全性 设置客户端连接后进行任何其他操作前先验证密码. 因为Redis速度相当快,所以在一台比较好的服务器下,一个外部用户可以在一秒钟进行150K次的密码尝试,这意味着需要指定一个非常强大的密码来 ...