1 solutions

  • 0
    @ 2025-11-5 14:56:32

    C :

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	int v[14];
    	int i,j,p,n;
        scanf("%d",&n);
        memset(v,0,sizeof(v));
        for(p=i=0;i<n;)
        {
            for(j=0;j<=i;)
             {
                p%=n;//记录位置
                ++p;//向后移动  记录第一个合理位置
                if(v[p]==0) ++j; //跳过 已有数据位置  跳 j次
    
    
             }
             v[p]=++i;
        }
        for(i=1;i<=n;i++)printf("%d ",v[i]);
        puts("");
        return 0;
    }
    

    C++ :

    #include"stdio.h"
    #include"stdlib.h"
    
    typedef struct node
    {
        int data;
        struct node  *next;
    }sqlist,*linklist;
    
    linklist CreatLinkList(int cardnumber)
    {
        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,int cardnumber)
    {
        linklist p;
        int j;
        int countnumber = 2;
        p = head;
        p->data = 1;
        while(1)
        {
            for(j = 0; j<countnumber ; j++)
            {
                p = p->next;
                if(p->data)
                {
                    p->next;
                    j--;
                }
            }
            if(p->data==0)
            {
                p->data = countnumber;
                countnumber++;
                if(countnumber==cardnumber+1)
                break;
            }
        }
    }
    
    //销毁链表
    void DestroyList(linklist *List)
    {
    
    }
    
    int main()
    {
        linklist p;
        int i,cardnumber;
        scanf("%d",&cardnumber);
    
        p = CreatLinkList(cardnumber);
        Magician(p,cardnumber);
        //输出结果
        for(i = 0; i<cardnumber; i++)
        {
            printf("%d ",p->data);
            p = p->next;
        }
    
        DestroyList(&p);
    
        return 0;
    }
    
    
    • 1

    Information

    ID
    16244
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By