• 魔术师发牌问题--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();
        }
    }
  • 相关阅读:
    [POJ][3072][Robot]
    [HDU][4021][24 Puzzle]
    [POJ][1228][Grandpa's Estate]
    [POJ][3662][Telephone Lines]
    [HDU][4007][Dave]
    [POJ] [1264] [SCUD Busters]
    ASP.NET中的COOKIE
    分享至...(源码)
    php获取图片并输出
    VNC 服务器/本地复制粘贴实现命令
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7201229.html
Copyright © 2020-2023  润新知