设为首页收藏本站language 语言切换
查看: 1303|回复: 0
收起左侧

[分享] C语言的算法:报数游戏

[复制链接]
发表于 2022-10-12 09:15:36 | 显示全部楼层 |阅读模式

学技术,重在日拱一卒,一点一滴的积累。


今天,我们一起来分析C语言的算法:报数游戏。


算法题目:假设一共有n个人玩游戏,编号分别为1~n,手动输入一个小于n的数w,则从1开始查数,当数到w的时候,则此编号的人退出游戏,然后下一个人重新开始从1报数,,直到所有人都退出游戏,求退出玩家的编号依次为什么?

例如:有5人玩游戏,w为2,则退出顺序为2 4 1 5 3。



编程思路


编程思路:


1、根据题目要求,需要输入两个数n和m,当每次到m的时候,就有人退出,然后再重新开始报数1~m。

2、可以通过要求,理解为将1~n编号从1开始循环,到m之后对应编号退出,再重新开始循环,那么为了达到以上目的,可以通过设置链表的方式来存储编号,同时将链表的首位连接,构成闭环的链表。

3、通过闭环的链表,我们就可以不断的循环n次,在每次循环里面再循环m次,每次退出一人,然后在while循环中执行n减减操作,直到所有人退出完毕,结束循环。





程序范例


#include <stdio.h>

#include <stdlib.h>&#160;

struct ele

{

&#160; int no;

&#160; struct ele *link;

};

int n,m,i;

main()

{

&#160; struct ele *h,*u,*p;

&#160; system("cls");

&#160; printf("请输入 n (一共有多少人完游戏)和 m(报几个数出去一个人):\n");

&#160; scanf("%d%d",&n,&m);

&#160; h=u=(struct ele *)malloc(sizeof(struct ele));

&#160; h->no=1;

&#160; for(i=2;i<=n;i++)

&#160; {

&#160; &#160; u->link=(struct ele *)malloc(sizeof(struct ele));

&#160; &#160; u=u->link;

&#160; &#160; u->no=i;

&#160; }

&#160; u->link=h;

&#160; puts("\n依次退出循环的人数是:");


while(n)

{

&#160; for(i=1;i<m;i++)

&#160; u=u->link;

&#160; p=u->link;

&#160; u->link=p->link;

&#160; printf("%4d",p->no);

&#160; free(p);

&#160; n--;

}

printf("\n\n Press any key to quit...\n");

getch();

}

程序运行结果:
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-1 08:56 , Processed in 0.053869 second(s), 11 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表