【C语言】——n人围成一圈从第1个人开始按1~3报数,报3的人退出圈子,求最后留下的是几号(用链表的方法解决)

标签: C语言链表  c语言

思路和用非指针的方法解决是一样的,非指针解决本题可以参考这个程序

/*
 时间:2020/08/05
 目的:n人围成一圈从第1个人开始按1~3报数,报3的人退出圈子,求最后留下的是几号
 功能:用链表解决一些实际问题,加深对链表的理解和运用 
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h> 

typedef struct BX
{
 int num;
 struct BX *pNext;
}NODE,*PNODE;

PNODE creatlist(int);//创建链表函数 
void shaixuan(PNODE,int);//筛选游戏人数函数

int main()
{
 PNODE pHead;
 int len;
 printf("输入游戏人数:");
 scanf("%d",&len);
 pHead=creatlist(len); 
 shaixuan(pHead,len);
 return 0; 
}

PNODE creatlist(int len)
{
 PNODE pHead,p;
 pHead=(PNODE)malloc(sizeof(NODE));
 p=pHead;
 int i;
 for(i=0;i<len;i++)
 {
  PNODE q=(PNODE)malloc(sizeof(NODE));
  q->num=i+1;
  p->pNext=q;
  p=q;
 }
 p->pNext=NULL;
 return pHead;
}

void shaixuan(PNODE pHead,int len)
{
 PNODE p=pHead->pNext;
 int temp=len,count=0;
 while(temp>1)
 {
  if(p->num!=0)
     count++;
  if(count==3)
  {
   p->num=0;
   count=0;
   temp--;
  }
  p=p->pNext;
  if(p==NULL)
  p=pHead->pNext;
 }
 for(p=pHead->pNext;p!=NULL;p=p->pNext)
 {
  if(p->num!=0)
  printf("\n最后留下的是%d号",p->num);
 }
}

**在dev中输出结果为 **
在这里插入图片描述

版权声明:本文为qq_45804075原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45804075/article/details/107818217