有一条环形铁路上,共有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;
}
程序运行结果:
约瑟夫斯问题的演化版本
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82651.html