经典问题:猴子选大王!本人c语言新手♛

山上住着10个猴子,猴子编号从1到10。现要从中选出一个大王。猴子们围成一圈,从第一个猴子开始数数,数到n就退出圈子,直到剩下最后一个猴子,并输出猴子王的编号。图片说明

刚学一维数组。。。。

这里将人数定死在10个人了

#include<stdio.h>
#include<iostream>
using namespace std;

int main()
{
    int i, j, k, m;
    int num[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//以1至n为序给每个人编号
    printf("输入报数的数字:j=");
    scanf("%d",&j);

    i = 0;//i为每次循环时计数变量
    k = 0;//k为按1,2,3...报数时的计数变量
    m = 0;//m为退出人数
    while(m < 9)//当退出人数比n-1少时执行循环体
    {
        if(num[i] != 0)//当前的这个人还没有出局
            k++;
        if(k == j)//这个人这轮需要出局
        {
            printf("出局人序号:%d\n", num[i]);
            num[i] = 0;//将退出的人的编号置为0
            k = 0;//k报到j后,重置为0
            m++;//退出的人数+1
        }
        i++;
        if(i == 10)
            i = 0;//报数到尾后,i恢复为0
    }
    for(i = 0; i < 10; i++)
    {
        if(num[i] != 0)
            printf("最后留下的人的编号是:%d\n", num[i]);//只有一个num[i]不是0
    }

    system("pause");
    return 0;
}

运行结果:
图片说明

这是个经典的循环链表 具体的写不出来