zoukankan      html  css  js  c++  java
  • 循环链表解决魔术师发牌问题

    C语言代码实现如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define CardNumber 13
    
    typedef struct node {
        int data;
        struct node *next;
    }sqlist,*linklist;
    
    // 创建链表
    linklist CreateLinkList() {
        linklist head = NULL;
        linklist s,r;
        int i;
        r = head;
        for(i=1;i<=CardNumber;i++) {
            s = (linklist)malloc(sizeof(sqlist));
            s->data = 0;
            if(head==NULL){
                head = s;
            }else {
                r->next = s;
            }
            r = s;
        }
        r->next = head;
        return head;
    }
    
    // 发牌顺序
    void Magician(linklist head){
        linklist p;
        int j;
        int Countnumber = 2;
    
        p = head;
        p->data = 1; // 第一张牌放1
    
        while(1){
            for(j=0; j<Countnumber; j++){
                p = p->next;
                if(p->data != 0){   // 该位置有牌的话,则下一个位置
                    p->next;
                    j--;
                }
            }
    
            if(p->data == 0){
                p->data = Countnumber;
                Countnumber ++;
                if(Countnumber==14){
                    break;
                }
            }
        }
    }
    
    // 销毁工作
    
    void DestoryList(linklist* list){
        linklist q,p;
        p = (*list)->next;
        while(p!=list){
            q = p->next;
            free(p);
            p = q;
        }
        free(list);
        *list = NULL;
    }
    int main()
    {
        linklist p;
        int i;
        p = CreateLinkList();
        Magician(p);
    
        printf("按如下顺序排列:
    ");
        for(i=0;i<CardNumber;i++){
            printf("黑桃%d ", p->data);
            p = p->next;
        }
        DestoryList(p);
        return 0;
    }

    运行结果:

  • 相关阅读:
    线段树区间最大子段和
    NTT数论变换
    cdq分治·三维偏序问题
    线段树区间开方
    怎么联系$zcy$呢?
    题解 CF375D 【Tree and Queries】
    点分治模板
    Good Bye 2018题解
    Hello 2019题解
    Codeforces Round #525 (Div. 2)题解
  • 原文地址:https://www.cnblogs.com/ncuhwxiong/p/6933946.html
Copyright © 2011-2022 走看看