您的位置:首页 > 运维架构 > Linux

Linux环境下C语言实现报数游戏

2012-10-25 11:08 489 查看
题目:输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。


[liul@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;
}

[liul@test baoshu]$ gcc BaoShu.c -o BaoShu -Wall
[liul@test baoshu]$ ./BaoShu

输入人数,小于零退出:9

输入报到数:5
5出队
1出队
7出队
4出队
3出队
6出队
9出队
2出队
幸存者是8
[liul@test baoshu]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: