鱼C论坛

 找回密码
 立即注册
查看: 2755|回复: 1

[技术交流] 魔术师发牌问题的解决

[复制链接]
发表于 2015-3-27 17:03:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

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

void InitList(struct Node **, struct Node **, int);
void CreateList(struct Node *, struct Node *, struct Node **, struct Node **, int);
void ListTraverse(struct Node *, struct Node *);

void main()
{
        struct Node *head, *rear, *r, *s;
        int n;
        printf("请输入黑桃牌的张数: ");
        scanf("%d", &n);
        putchar('\n');
        InitList(&head, &rear, n);
        CreateList(head, rear, &r, &s, n);
        ListTraverse(r, s);
}

void InitList(struct Node **head, struct Node **rear, int n)
{
        struct Node *p, *q;
        int i, j;
        *head = (struct Node *)malloc(sizeof(struct Node));
        p = *head;
        for(i=1;i<=n;i++)
        {
                j = 1;
                q = (struct Node *)malloc(sizeof(struct Node));
                p->next = q;
                p = q;
                q->data = 0;
        }
        p->next = (*head)->next;
        *rear = p;
}

void CreateList(struct Node *head, struct Node *rear, struct Node **r, struct Node **s, int n)
{
        struct Node *p=head->next, *q=rear, *t;
        int i=1, j;
        InitList(r, s, n);
        t = (*r)->next;
        while(p!=p->next)
        {
                j= 1;
                while(j%i)
                {
                        p = p->next;
                        while(t->next->data!=0)
                        {
                                t = t->next;
                        }
                        t = t->next;
                        q = q->next;
                        j++;
                }
                printf("黑桃%2d    ", i);
                t->data = p->data = i++;
                q->next = p->next;
                free(p);
                p = q->next;
                while(t->next->data!=0)
                {
                        t = t->next;
                }
                t = t->next;
        }
        t->data = i;
        printf("黑桃%2d    \n\n", i);
}

void ListTraverse(struct Node *r, struct Node *s)
{
        struct Node *p = r;
        printf("**********扑克牌应该按如下顺序排列:**********\n\n");
        while(p!=s)
        {
                p = p->next;
                printf("黑桃%2d    ", p->data);
        }
        printf("\n\n");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-5 09:03:11 | 显示全部楼层
虽然我看不懂在说什么。但是还是要顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 12:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表