C语言数组实现约瑟夫环出圈问题 代码详细注释 简单易懂
日期: 2020-12-14 分类: 跨站数据 475次阅读
如果没理解,那手动模拟一遍,就懂了!
#include<stdlib.h>
#define N 10
void Joseph(int p[],int n,int s,int m);
void main(){
int p[N],s,m,i; //s为从第几个开始报数,m为报到第几个人出队
printf("请输入从第几个人开始报数,第几个人出队:");
scanf("%d%d",&s,&m);
Joseph(p,N,s,m);
for(i=N-1;i>=0;i--){
printf(" %4d",p[i]);
}
}
void Joseph(int p[],int n,int s,int m){
int i,j,s1=s,temp;
for(i=1;i<=n;i++){ //n个人循环编上号
p[i-1]=i;
}
for(i=n;i>=2;i--){ //用i控制没出去圈的总人数
s1=(s1+m-1)%i; //找出出圈报数人的位序
if(s1==0) //如果s1为0说明最后一个人报的数,它的序号是i
s1=i;
temp=p[s1-1]; //暂存出队人对应数组中的值
for(j=s1;j<i;j++){ //出队人后的人依次往前一位
p[j-1]=p[j];
}
p[i-1]=temp; //出队人的值放在数组最后
}
}
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐