猴子选大王

详解见ttps://blog.csdn.net/sxhelijian/article/details/49226553

我的代码

#include <stdio.h>
void SelectKing (int n,int m);
int main()
{
    int n,m;
    scanf(\"%d%d\",&n,&m);
    SelectKing (n,m);
    return 0;
}
void SelectKing (int n,int m)
{
    int A[100],j=1,k=1,t=0;
    for(int i=1;i<=n;i++)
    {
        A[i]=1;
    }
    for(j=1;j<=n;j++)
    {
        k=1;//报数开始
        while(k<=m)//报数结束
        {
           t=(t+1)%(n+1);//注意要折回去
           if(A[t]==1)
           {
               k++;
           }
        }
        A[t]=0;
        printf(\"%d %d\\n\",t,A[t]);
    }

    printf(\"\\n\");
    printf(\"king is %d\",t);
}

心得

1.判断条件很简单,要每次跳过为0的猴子,就是条件化报数的问题,如k 用来计数
2.如何循环输出1 2 3 4 1 2 3 4 1 2 3 4,用一个数的增长%5就可以,注意最大得到的是4,就%5
3.条件的控制

 k=1;//报数开始
        while(k<=m)//报数结束
        {
           t=(t+1)%(n+1);//注意要折回去
           if(A[t]==1)
           {
               k++;
           }
        }

while(k<=m),要自己推算

收藏 打印