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