• 小孩围圈问题


    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);

    }

  • 相关阅读:
    Java IO流
    Java中Char和Byte的区别
    Java常用类
    View
    3 View
    View
    3 View
    3 View视图 URLconf
    2 Model层
    2 Model层-模型成员
  • 原文地址:https://www.cnblogs.com/Luyang233/p/14526371.html
Copyright © 2020-2023  润新知