约瑟夫问题

约瑟夫问题

 1/**//********************
 2*约瑟夫问题 By Yiner*
 3********************/

 4#include<iostream>
 5#include<stdio.h>
 6using namespace std;
 7int main()
 8{
 9    int n,m;
10    int k=1,kk=0,kkk=0;
11    int a[10001];
12    while(scanf("%d%d",&n,&m)!=EOF)
13    {    
14         k=1,kk=0,kkk=0;//k为数组下标 kk记录数到的猴子数 kkk记录踢除的猴子数
15        if(n==0&&m==0)
16        break;
17      for(int i=1;i<=n;i++)
18            a[i]=1;
19         while(1)
20         {
21             if(a[k]==1)
22             {
23                  kk++;
24                 if(kkk==n-1)
25                 {
26                     printf("%d\n",k);
27                     break;
28                 }

29             }

30             if(kk==m)
31             {
32               a[k]=0;
33               kk=0;
34               kkk++;
35             }

36             if(k==n)
37             k=1;
38             else
39             k++;
40         }

41    }

42    return 0;
43}

44

你可能感兴趣的:(约瑟夫问题)