问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{
int A[100],B[100],N,n,m,i,j,Yet,Initial,Out,k;
for(i=0;i<100;i++){
scanf("%d",&(A[i]));
scanf("%d",&(B[i]));
if(A[i]==0) break;
}
N=i;//用N记录输入数据的总组数
int b[N]; //用于存储不同m, n对应的猴王的编号
for(k=0;k<N;k++){
n=A[k],m=B[k],Initial=0;
//Initial是最开始报数的猴的编号【注意归零问题】
int a[n];
for(i=0;i<n;i++) a[i]=1;
//将数组a[n]中的每个元素都赋初值为1
for(i=0;i<n-1;i++){
//只做n-1次循环,每次循环出局一猴,最后正好只剩下一猴
Yet=0;
for(j=Initial;Yet<m;j++){
if(j>=n) j=j%n;
if(a[j]==1) Yet++;
//Yet表示已报数的猴的累计数目
}
Out=j;//变量Out表示出局的猴的编号
if(Out>=n) Out=Out%n;
a[Out]=0;
Initial=j+1;
}
for(i=0;i<n;i++){
if(a[i]==1) b[k]=i+1;
}
}
for(i=0;i<N;i++) printf("%d\n",b[i]);
return 0;
}
运行结果及报错内容
输入:
12 4
0 0
输出:
12