【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中输出结果为 **
上一篇: 基于UDP的demo——实现用户端查询英文单词,客户端翻译回复用户
下一篇: 自绘按钮加载png的类
推荐阅读
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
-
约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位
-
(C语言)13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子.找出最后留在圈子中的人原来的序号,要求用链表实现
-
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。
-
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(*)
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
-
约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。