一共有N个人,围成一圈,从一开始报数,数到M的人出局,然后重新开始报数。算出出局的人的顺序;如果最后只能剩下一个人,请问是几号?
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int key;
struct node *next;
}*Linklist,node;
Linklist init_ring(int num){
Linklist HEAD,pnew,pend;
int i = 0,key = 0;
HEAD = (Linklist)malloc(sizeof(node));
HEAD->key = 0;
pend = HEAD;
while(i<num){
i++;
pnew = (Linklist)malloc(sizeof(node));
pnew->key = i;
pend->next = pnew;
pend = pnew;
pend->next = HEAD;
}
return HEAD;
}
int kill_game(Linklist head,int key,int p_num){
Linklist p_node,temp_node;
p_node = head;
temp_node = head;
int kill_num = 0,i = 0;
while(kill_num < p_num-1){
if(p_node->key == 0){
temp_node = p_node;
p_node = p_node->next;
}
i++;
if( i==key ){
temp_node->next = p_node->next;
free(p_node);
p_node = temp_node->next;
i=0;
kill_num++;
continue;
}
temp_node = p_node;
p_node = p_node->next;
}
return head->next->key;
}
int main(void){
Linklist head;
int kill_flag,p_num;
printf("请输入参加游戏的人数和出局标记,以逗号(,)隔开:");
scanf("%d,%d",&p_num,&kill_flag);
head = init_ring(p_num);
printf("活下来的人是:%d",kill_game(head,kill_flag,p_num));
}