#include
int main()
{
void gaid(int number1,int number2);
int n,m;
printf("请输入参与游戏人数:\n");
scanf("%d",&n);
printf("请输入每次游戏第几人被淘汰出局:\n");
scanf("%d",&m);
gaid(n,m);
return 0;
}
void gaid(int number1,int number2)
{
int arr[number1],*p=arr,i,flage=0,sum=0;
for(i=0;i<number1;i++) //给数组依次写入从1开始的数
{
arr[i]=i+1;
}
while(number1!=1)
{
while(flage<number2)
{
if(p==&arr[number1]) //当指针指到数组最后一个时把指针指回数组首位置
{
p=&arr[0];
}
if(*p!=0) //这个指针所指的值不为零时计数器加一位
{
flage++;
}
if(flage<number2) //当达到要被踢的位置时,指针不向下一位移动
{
p++;
}
}
if(flage==number2) //当达到要被踢的位置时,计数器重新清零,指针所指值变为零
{
flage=0;
*p=0;
number1-=1;
}
}
for(i=0;i<number1;i++) //循环完毕后,把数组中所有值之和加起来,其和就是原 游戏者的序号
{
sum+=arr[i];
}
printf("%d",sum);
}
if(p==&arr[number1]) 最后一个是ar[number1-1]呀,这里错了
#include
int M = 3; //报到3的人就退出
int main()
{
int n, s = 0; //n为参赛人数
scanf("%d", &n);
for (int i = 2; i <= n; ++i)
s = (s+M)%i;
printf("%d\n", s+1); //打印出最后留下的人
return 0;
}
应该通过调试来处理,也能提高你的调试能力