C:n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人

来源:互联网 发布:ping端口命令 编辑:程序博客网 时间:2024/05/16 05:18
//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;}

0 0
原创粉丝点击