魔术师发牌问题

问题描述:
魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。
魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;
然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;
第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第三张牌翻过来正好是黑桃3;……直到将所有的牌都翻出来为止。
问原来牌的顺序是如何的。

#include<iostream>

using namespace std;


struct Node
{
    int data;
    struct Node *next;
};

void create(Node *& head) { //创建环链表
    Node *p,*q=head;
    for (int i = 0; i < 12; i++) {
        p = new Node;
        p->data = 0;        //初始化为0
        q->next = p;
        q = q->next;
    }
    p->next = head;
}

void Magician(Node *& head) {
    Node *p = head;
    head->data = 1;
    for (int num = 2; num <= 13; num++) {
        int i = 0;
        while (i < num) {
            p = p->next;
            if (p->data == 0) {
                i++;
            }
        }
        p->data = num;
    }
}

int main() {
    Node *head = new Node;
    head->data = 0;
    create(head);
    Magician(head);
    for(int i=0;i<13;i++) {
        cout << head->data<<" ";
        head=head->next;
    }
    
    return 0;
}

输出结果:1 8 2 5 10 3 12 11 9 4 7 6 13

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容