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实现的更多相关文章

  1. 魔术师发牌问题 -- python实现

    问题描述 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来, ...

  2. javaSE第十八天

    第十八天    192 1:Map(掌握)    192 (1)定义:    192 (2)Map和Collection的区别?    192 (3)Map接口功能概述(自己补齐)    192 A: ...

  3. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  4. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. Java基础知识强化之集合框架笔记71:模拟斗地主洗牌和发牌并对牌进行排序的案例

    1. 模拟斗地主洗牌和发牌并对牌进行排序的原理图解: 2. 代码实现: 思路: • 创建一个HashMap集合 • 创建一个ArrayList集合 • 创建花色数组和点数数组 • 从0开始往HashM ...

  6. Java基础知识强化之集合框架笔记70:模拟斗地主洗牌和发牌(ArrayList)

    1. 模拟斗地主洗牌和发牌 分析:     A:创建一个牌盒     B:装牌     C:洗牌     D:发牌     E:看牌 2. 代码实现: package cn.itcast_03; im ...

  7. Java学习之利用集合发牌小练习

    /* * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌同时往Arra ...

  8. JAVA 实现发牌的 改进

    java是一门面向对象的语言,我们在解决这个问题的时候先找对象.我认为面想对象 “就是把复杂的问题变简单,简单的问题程序化” .如果我们  创建一盒牌--->洗牌--->选地主牌---&g ...

  9. Java模拟斗地主发牌和洗牌

    package cn.itcast_04; import java.util.ArrayList; import java.util.Collections; import java.util.Has ...

随机推荐

  1. 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)(转)

    序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方.    .NET框架提供了两种串行化的方式: ...

  2. 《挑战程序设计竞赛》2.1 广度优先搜索 AOJ0558 POJ3669 AOJ0121

    AOJ0558 原文链接: AOJ0558 题意: 在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每 ...

  3. mixin 在传参中可以出现 参数 在类内部可以定义 作用域

    mixin 在传参中可以出现 参数  在类内部可以定义

  4. PS导出@3x、@2x、@1x格式的iOS切图神器-Retinize

    Retinize动作下载地址:http://retinize.it/ 使用:ps-载入动作-选中图片-执行动作

  5. Python 中星号作用:解包&打散

    python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包.  计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...

  6. 0x05 MySQL 数据操作

    一 插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二: INSERT I ...

  7. python基础知识回顾[1]

    1.声明变量 # 声明一个变量name用来存储一个字符串'apollo' name = 'apollo' # 声明一个变量age用来存储一个数字20 age = 20 # 在控制台打印变量name中存 ...

  8. javascript实例:显示时间

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...

  10. 标准c时间与日期函数

    标准c时间与日期函数 asctime 语法:     #include <time.h>   char *asctime( const struct tm *ptr ); 功能: 函数将p ...