【C语言】有一条环形铁路上,共有n个车站(车站的顺序如图所示)现有检查组去检查服务质量,从第s个车站开始,每隔m个站检查一个,直到所有的站都检查完。编写一个程序输出检查顺序。

导读:本篇文章讲解 【C语言】有一条环形铁路上,共有n个车站(车站的顺序如图所示)现有检查组去检查服务质量,从第s个车站开始,每隔m个站检查一个,直到所有的站都检查完。编写一个程序输出检查顺序。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

有一条环形铁路上,共有n个车站(车站的顺序如图所示)现有检查组去检查服务质量,从第s个车站开始,每隔m个站检查一个,直到所有的站都检查完。编写一个程序输出检查顺序。

【C语言】有一条环形铁路上,共有n个车站(车站的顺序如图所示)现有检查组去检查服务质量,从第s个车站开始,每隔m个站检查一个,直到所有的站都检查完。编写一个程序输出检查顺序。

笔者认为是约瑟夫斯问题的演化版本(CSDN),大致方法是一致的

#include<stdio.h>
int main(){
	int n=0,m=0,s=0;		//n:车站总数,m:间隔数,s起始点 
	int i,count=0,num=1;		//count记录间隔数,num记录检查过的车站数,起始点必检查故num初值为1 
	printf("输入n,s,m:");
	scanf("%d%d%d",&n,&s,&m);	//依次获取车站总数、起始点 、间隔数
	int a[n];					//定义存储车站次序的一维数组 
	for(i=0;i<n;i++)		
		a[i]=i+1;				//一维数组初始化为车站顺序 
	printf("%d->",a[s-1]);		//起始点必检查,直接输出(因数组下标从0开始,故减1) 
	a[s-1]=0;					//该元素置0,表示已检查,
	i=s;						//剩下将从第s个开始 
	while(1){
		if(a[i]!=0)		//检查该车站是否已检查 
			count++;	//没有检查则计数1次 
		if(count-1==m){				//该车站前是否有m个未检查 
			printf("%d->",a[i]);	//是则检查该车站 
			a[i]=0;					//检查完毕,元素置0 
			num++;					//记录已检查车站数 
			count=0;				//计数器置0 
		}
		if(num==n)break;			//若全部检查完毕则退出循环 
		else if(i==n-1)i=0;			//否则如果到本轮末尾,从头开始 
		else i++;					//否则i++ 
	}
	return 0;
}

 程序运行结果: 

【C语言】有一条环形铁路上,共有n个车站(车站的顺序如图所示)现有检查组去检查服务质量,从第s个车站开始,每隔m个站检查一个,直到所有的站都检查完。编写一个程序输出检查顺序。

约瑟夫斯问题的演化版本

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82651.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!