欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-10 22:08:02
...

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

/*
 时间: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中输出结果为 **
【C语言】——n人围成一圈从第1个人开始按1~3报数,报3的人退出圈子,求最后留下的是几号(用链表的方法解决)

推荐阅读