约瑟夫环问题
第一行为N,表示有N个孩子
接下来输出N孩子的名字
第三部分为W,M
w为第一个开始报数的位置,数到第M个孩子就出局
这个主要在于递推公式的推导 出列的位置W=(W+M-1)%N
用一个数组来保存原来位置,当一个孩子出列的时候,就把后面元素位置提前
#include<stdio.h>
int main()
{
int n,s,m,w;
int b[101];
char d[101][101];
s=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
b[i]=i;
scanf("%s",&d[i]);
}
scanf("%d,%d",&w,&m);
w=(w+n-1)%n;
do
{
w=(w+m-1)%n;
printf("%s\n",d[b[w]]);
for(int j=w;j<n-1;j++)
b[j]=b[j+1];
}while(--n);
return 0;
}