有n个小朋友一圈,从1号开始传递,每次传递3个人,拿到花的小朋友表演节目后退出。
如1-5个小朋友,从1号开始传花,表演次序为3号,1号,5号,2号,4号。
5个小朋友击鼓传花
//击鼓传花
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100
typedef struct node{ struct node *next; int data;}Node;
void create(Node *h){
Node *q,*p;
q=h;
for(int i=1;i<6;i++){
p=(Node *)malloc(sizeof(Node));
p->data=i;
q->next=p;
q=p;
}
q->next=h->next;
}
void out(Node *h){
Node *p;
p=h->next;
for(int i=0;i<5;i++){
printf("%d ",p->data);
p=p->next;
}
}
void del(Node *q){
Node *p;
p=q->next;
q->next=p->next;
printf("第%d号小朋友拿到花\n",p->data);
free(p);
}
int main(){
Node *h=(Node *)malloc(sizeof(Node));
create(h);
printf("创建的链表为");
out(h);
printf("\n");
Node *q=h;
for(int i=0;i<4;i++){
q=q->next->next;
del(q);
}
printf("最后一个拿到花的是%d",q->data);
}
n个小朋友击鼓传花
//击鼓传花
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100
typedef struct node{ struct node *next; int data;}Node;
void create(Node *h,int n){
Node *q,*p;
q=h;
for(int i=1;i<n+1;i++){
p=(Node *)malloc(sizeof(Node));
p->data=i;
q->next=p;
q=p;
}
q->next=h->next;
}
void out(Node *h,int n){
Node *p;
p=h->next;
for(int i=0;i<n;i++){
printf("%d ",p->data);
p=p->next;
}
}
void del(Node *q){
Node *p;
p=q->next;
q->next=p->next;
printf("第%d号小朋友拿到花\n",p->data);
free(p);
}
int main(){
int n;
scanf("%d",&n);
Node *h=(Node *)malloc(sizeof(Node));
create(h,n);
printf("创建的链表为");
out(h,n);
printf("\n");
Node *q=h;
for(int i=0;i<n-1;i++){
q=q->next->next;
del(q);
}
printf("最后一个拿到花的是%d",q->data);
}