栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

解题思路:写一个函数,该函数从主函数接收一个整数n(即人数),定义一个大小为n的一维数组,定义个一个指向该数组的指针。给该一维数组初始化为从1到n。 设一计数器,按照题述条件,内层循环遍历每一个数组元素,并从1到3报数,若当前元素计数为3则使其置0(即标记该人出局),同时使计数器置0并记录出局人数。如果出局人数为n-1人(即只剩下1人)终止循环,否则由外层循环控制使得再次遍历数组,直到踢出n-1人。最后满足只剩1人的条件后,再次遍历数组,找出那个最终没有被踢出的人,并返回其序号。

 下图以7个人为例:

编写程序:

#include
int main(){
	int fun1(int n);	//函数声明 
	int n;				
	printf("输入总人数:n");
	scanf("%d",&n);		//获取人数
	printf("最终留下的是%d号",fun1(n));		//函数调用与结果输出 
	return 0; 
}
int fun1(int n){
	int r[n],i,num=0,time=0; 
	int *p=r;		//指针初始化 
	for(i=1;i<=n+1;i++)		 
		r[i-1]=i;	//将这n个人编号从0~n)
	while(1){	
		for(i=0,p=r;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号