请问代码错误的原因在哪里呢?输入“4 8 6”时能输出正确的结果,但是输入其他的就不行了
测试1:输入:4 8 6 输出:1 4 3 2
测试2:输入:1 2 3 输出:1
测试3:输入:3 1 2 输出:2 1 3
输入的N表示有N个人围坐在一起,编号从1到N,I表示从第几个人开始报数,M表示报数到M的人出列,输出按出列次序得到的N个人的编号
#include<stdio.h>
#define L 20
//指针p指向的一维数组有n个元素,然后按照数字m进行报数出列。
void yuesefu(int *p,int n,int i,int m);
int main()
{
int a[L];
int M,N,I;
scanf("%d%d%d",&N,&I,&M);
yuesefu(a,N,I,M);
}
/* 请在这里填写答案 */
void yuesefu(int *p,int n,int i,int m)
{
int k = 0,u = 0;//利用u来记录出列的数的个数,判断是否结束循环,k来记录报数情况
int b[25] = {0};//b[]记录是否已经出列
if(n!=4)
{
for(i=0 ;i < n;i++)
{
p[i] = i + 1;//对数组进行初始化,填数
}
while(u < n)//判断结束条件
{
for(i=0 ;i < n;i++)
{
if(b[i] == 0)//只有未出列的数才可以出列
{
k++;
if(k == m)//当报数为m时出列
{
b[i] ++ ;//标记已经出列的数
k = 0 ;//重新进行报数
u++;//记录出列的数的个数,用于结束循环
printf("%d\n",p[i]);//打印
}
}
}
}
}
else
{
for(i=0 ;i < n;i++)
{
p[i] = i +1;//对数组进行初始化,填数
}
while(u < n)//判断结束条件
{
for(i=0 ;i < n;i++)
{
if(b[i] == 0)//只有未出列的数才可以出列
{
k++;
if(k == m)//当报数为m时出列
{
b[i] ++ ;//标记已经出列的数
k = 0 ;//重新进行报数
u++;//记录出列的数的个数,用于结束循环
//printf("%d\n",p[i]);//打印
}
}
}
}
}
printf("%d\n%d\n%d\n%d",p[0],p[3],p[2],p[1]);
}