题解 | #随机序列#

随机序列

https://ac.nowcoder.com/acm/contest/19306/1001

//报数理解成找人 报到m的人出队理解成抽人
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(void)
{
	int n, k, m,i,sum;
	int num[100];
	for (i = 0; i < 100; i++) num[i] = 1;//假设n个位置围一起 有人则标识为1
	scanf("%d%d%d",&n,&k,&m);//报数相当于不断找有人的位置 并抽出每次找到的第m个人
	while (1)//不断抽人 直到只剩一个位置有人时 break
	{
		i = 0;//i为每一次抽人时找到的是第几个人
		while (i != m)
		{
			if (num[k++] == 1) i++;
			if (k == n) k = 0;
		}
		int h = k - 1;
		if (k - 1 == -1) h = n - 1;
		num[h] = 0;
		sum = 0;
		for (i = 0; i < n; i++)//只剩一个同学了
			sum += num[i];
		if (sum == 1) break;
	}
	for (i = 0; i < n; i++)
		if (num[i] == 1)
			printf("%d\n",i);
	return 0;
}
全部评论

相关推荐

你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务