Linux C写报数游戏
Linux C写报数游戏
题目:输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。
- [www.bkjia.com @test baoshu]$ more BaoShu.c
- #include <stdio.h>
- #include <malloc.h>
- /*********************************************************************
- *以循环队列的数据结构实现
- *时间复杂度T(n)
- *采用循环队列数据结构,使得每次对数组的访问次数减少到最少
- **********************************************************************/
- int main(void)
- {
- int i=0,num=1,die=0,front,rear,temp=0;
- while(num!=0)
- {
- printf("\n输入人数,小于零退出:");
- scanf("%d",&num);
- printf("\n输入报到数:");
- scanf("%d",&die);
- int *cycle=(int *)malloc((num+1)*sizeof(int));
- for(i=0;i<=num;i++)
- {
- cycle[i]=i;
- }
- front=1;
- rear=num;
- i=1;
- while(front!=rear)
- {
- temp=(rear+1)%(num+1);
- cycle[temp]=cycle[front];
- front=(front+1)%(num+1);
- if(i==die)
- {
- i=1;
- printf("%d出队\n",cycle[temp]);
- }
- else
- {
- i++;
- rear=(rear+1)%(num+1);
- cycle[rear]=cycle[temp];
- }
- }
- printf("幸存者是%d\n",cycle[front]);
- free(cycle);
- num=0;
- }
- return 0;
- }
- [www.bkjia.com @test baoshu]$ gcc BaoShu.c -o BaoShu -Wall
- [www.bkjia.com @test baoshu]$ ./BaoShu
- 输入人数,小于零退出:9
- 输入报到数:5
- 5出队
- 1出队
- 7出队
- 4出队
- 3出队
- 6出队
- 9出队
- 2出队
- 幸存者是8
- [www.bkjia.com @test baoshu]$
评论暂时关闭