思想:1.把每个数字依次放入到单链表中。
2.不符合条件的删除其节点。
3.剩下的节点就是答案。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
int main(){
int num;
printf("请输入总数:");
scanf("%d",&num);
/*创建单链表*/
LNode *L,*p,*s;
int n=num;
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
while(n>0){
p=(LNode *)malloc(sizeof(LNode));
p->data=n;
if(n==num)
s=p;
p->next=L->next;
L->next=p;
n--;
}
s->next=L->next;
/*不符合条件的删除其节点*/
int count=1;
int num2;
printf("请输入报数的数字:");
scanf("%d",&num2);
do{
s=p;
p=p->next;
count++;
if(count==num2){
s->next=p->next;
free(p);
p=s->next;
count=1;
}
}while(s->next!=s);
printf("获胜者为:%d",s->data);
return 0;
}
总结:好理解,易实现,希望有错误可以指正。