码迷,mamicode.com
首页 > 其他好文 > 详细

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

时间:2020-07-09 19:27:42      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:lazy   int   turn   please   com   lang   system   开始   any   

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

解题思路: 从第一个人开始,逐个报数,谁报3就退出,并且重置报数,直到最后一个人后,又重新从第一个人继续报数,直到最终只剩一个人的时候退出即可。

答案:

#include <stdio.h>
int main()
{
	int people[128], n;
	printf("Please input how many people: ");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		people[i] = i + 1; //对每个人顺序排号
	}
	int remain = n;
	int num_off = 0;
	int *p = NULL;
	while (remain > 1) {
		p = people;
		while (p != people + n) { // 每次从第一个位置开始,直到最后一个位置,报数是一直递增的
			if ((*p) != 0) {//若这个位置人还在
				num_off++; //则报数
				if (num_off == 3) {//否则当前的人即将要报的数字是3
					*p = 0;  //则剔除这个人
					num_off = 0; //并且重新开始计数,下边会++,所以是从1开始报数
					remain--;//剩余人数-1
				}
			}
			p++;
		}
	}
	for (int i = 0; i < n; i++) {
		if (people[i] != 0) {
			printf("Serial number of the remaining person:%d\n", people[i]);
		}
	}

	printf("\n");
	system("pause");
	return 0;
}

技术图片

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

标签:lazy   int   turn   please   com   lang   system   开始   any   

原文地址:https://www.cnblogs.com/weiyidedaan/p/13275353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!