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

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

 方法一:使用数组

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
	int a[50] = { 0 };
	int n = 0;//人数
	int count = 0;//报数(1-3)
	int m = 0;//退出的人数
	int last = 0;//最后留下的人的号码
	int i = 0;
	printf("请输入总人数:");
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		a[i] = 1;//当a[i]=1时,(i+1)号还在圈里面
	}
	while (m < n) {
		for (i = 0; i < n; i++) {
			if (a[i] == 1) {
				count++;//开始报数
				if (count % 3 == 0) {
					a[i] = 0;//i+1号退出
					m++;//退出的数量
					count = 0;
					last = i + 1;
				}
			}
		}
	}
	printf("最后留下的是原来第%d号\n", last);
	return 0;
}

 运行结果:

 

 

 方法二:使用指针

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
	int i, k, m, n, num[50], * p;
	printf("请输入人数:");
	scanf("%d", &n);
	p = num;
	for (i = 0; i < n; i++) {
		*(p + i) = i + 1;
	}
	i = 0;
	k = 0;
	m = 0;
	while (m < n - 1) {
		if (*(p + i) != 0) {
			k++;	
		}
		if (k == 3) {
			*(p + i) = 0;
			k = 0;
			m++;
		}
		i++;
		if (i == n) i = 0;
	}
	while (*p == 0) p++;
	printf("最后留下的人是第%d号\n", *p);

	return 0;
}

运行结果:

 

版权声明:本文为博主作者:TangFighting原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/m0_58734370/article/details/129883208

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2024年1月3日
下一篇 2024年1月3日

相关推荐