约瑟夫问题是链表的经典问题,但是它在数组这里面出的,当然可以用数组来做,下面是题目的要求。
下面是代码。
#include <stdio.h>
int a[1001];
int main(){
int n,s,m;
scanf("%d %d %d",&n,&s,&m);
for(int i=0;i<n;i++){ //平平无奇的赋值
a[i]=i+1;
}
s--; //数组下标从零开始,所以第一个人是a[0],要把s-1;
while(1){
if(n==1){ //如果只剩下一个人
printf("%d",a[0]);
break;
}
s=s+m-1;//从s开始数m个人
if(s>n-1){ //如果数组越界了,取个模
s=s%n;
}
printf("%d ",a[s]);
for(int i=s;i<n;i++){ //删除被处死的人
a[i]=a[i+1];
}
n--; //容量减1,就是处死一个减去一次
}
}