魔术师发牌问题 C语言

这是一个使用C语言编写的程序,实现了魔术师发牌问题。程序通过创建一个循环链表来模拟牌堆,然后按照特定规则翻开牌并记录其位置。最后,程序输出翻开的牌及其在数组中的位置,呈现发牌效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct magic)

typedef struct magic{                    //结构体,包含一个整形和一个指针;
    int no;
    struct magic *next;
}PAI;
int a[14]={0};                          //包含14个元素的数组,用来存放每次翻开的卡牌

PAI *creat(){                           //创建循环链表   包含13个结构体,整型赋值 1-13 并按顺序链接;返回表尾指针。
    PAI *head,*p1,*p2;
    int i;
    head=p1=p2=(PAI *)malloc(LEN);
    for(i=1;i<13;i++){
        p1->no=i;
        p2=p1;
        p1=(PAI *)malloc(LEN);
        p2->next=p1;
    }
    p1->no=13;
p1->next=head;
return p1;

}
void fuzhi(PAI *p){                         // 从表尾开始数,(1-13);每删除(翻开)一个元素,获取他的位置  然后在数组对应的位置赋值该翻开卡牌的数值。
    int i,j;
PAI *p1=p;
for(i=1;i<=13;i++){
        for(j=1;j<i;j++){
                p1=p;
             p=p1->next;
            }
    if(i==1) { a[p1->next->no]=j;
                        p=p->next->next;
                        p1->next=p;
                }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值