小孩围圈问题

n个小孩围成圈,首先输入一个值给max,每个小孩手中有一个密码(通过输入赋值),N个小孩按着顺序报数,当报的数比max大时,此小孩出列,并将手中的密码给max,继续循环,直到最后一个小孩时,此小孩即为获胜者。要求输出小孩的出圈序列和最后胜利的小孩。要求写出详细代码和流程图。

#include <iostream>

using namespace std;

typedef struct node

{

    int data;

    struct node*next;

}Node;//构建循环链表

void ysflb(int n,int max,int *a)

{

    Node *head = NULL,*p = NULL,*r = NULL;

    head = (Node*)malloc(sizeof(Node));

    if(head == NULL)

    {

        cout << "Memory Fild";

        return;

    }

    head->data = a[0];

    head->next = NULL;

    p = head;

    for(int i = 1;i<n;i++)

    {

        r =  (Node*)malloc(sizeof(Node));

        r->data = a[i];

        r->next = NULL;

        p->next = r;

        p = r;

        

    }//将数组中的元素转移到链表中

    p->next = head;

    p = head;

    int i=0;

    while(p->next!=p)

    {

        i++;

        if(i>max)

        {

            max = p->data;

            r->next = p->next;

            free(p);

            p = r->next;

            cout<< max<<" ";

        }//删除节点

        else{

        r = p;

        p = p->next;

        }

    }

    

}

    

int main()

{

   int a[6] = {2,4,6,8,10,12};

    int max = 5;

    ysflb(6,max,a);

}

原文地址:https://www.cnblogs.com/Luyang233/p/14526371.html