//n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人
int lastOne(int n,int m)
{
if (m>n||n<=0||m<=0) {
printf("Range wrong\n");
exit(EXIT_FAILURE);
}
int arr[n];
//数组长度为n,值全为1,存放n个人
for (int i=0; i<n; i++) {
arr[i]=1;
}
//计数器
int counter=0;
//新第一人位置
int first=0;
//新最后一人位置
int last=0;
for (int i=0; i<n; i++) {
//判断第i人是否为0
if (arr[i]!=0) {
//记录新第一人的位置
if (counter==0) {
first=i;
}
counter++;
//记录新最后一人的位置
if (counter==m-1) {
last=i;
}
}
//将第m人清零
if (counter==m) {
//第一人循环被加两次==m,则剩下人数已不够m,结束
if (i==first) {
break;
}
counter=0;
arr[i]=0;
}
//不停遍历
if (i==n-1) {
i=-1;
}
}
return last+1;
}
C:n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人
最新推荐文章于 2021-12-16 21:13:35 发布