找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1142|回复: 0
收起左侧

C语言的算法:报数游戏程序

[复制链接]
ID:1040469 发表于 2022-10-12 09:16 | 显示全部楼层 |阅读模式
学技术,重在日拱一卒,一点一滴的积累。


今天,我们一起来分析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>

struct ele

{

  int no;

  struct ele *link;

};

int n,m,i;

main()

{

  struct ele *h,*u,*p;

  system("cls");

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

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

  h=u=(struct ele *)malloc(sizeof(struct ele));

  h->no=1;

  for(i=2;i<=n;i++)

  {

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

    u=u->link;

    u->no=i;

  }

  u->link=h;

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


while(n)

{

  for(i=1;i<m;i++)

  u=u->link;

  p=u->link;

  u->link=p->link;

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

  free(p);

  n--;

}

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

getch();

}

程序运行结果:
1.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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