• 顺序表求解约瑟夫问题

    顺序表求解约瑟夫问题

    1. #include <stdio.h>
    2. #define MaxSize 50
    3. void jose(int n,int m)
    4. {
    5. int mon[MaxSize]; /*存放n个猴子的编号*/
    6. int i,d,count;
    7. for (i=0;i<n;i++) /*设置猴子的编号*/
    8. mon[i]=i+1;
    9. printf("出队前:"); /*输出出列前的编号*/
    10. for (i=0;i<n;i++)
    11. printf("%d ",mon[i]);
    12. printf("\n");
    13. printf("出队后:");
    14. count=0; /*记录退出圈外的猴子个数*/
    15. i=-1; /*从0号位置的猴子开始计数*/
    16. while (count<n)
    17. {
    18. d=0;
    19. while (d<m) /*累计m个猴子*/
    20. {
    21. i=(i+1)%n;
    22. if (mon[i]!=0)
    23. d++;
    24. }
    25. printf("%d ",mon[i]); /*猴子出列*/
    26. mon[i]=0;
    27. count++; /*出列数增1*/
    28. }
    29. printf("\n");
    30. }
    31. void main()
    32. {
    33. int m,n;
    34. printf("输入猴子个数n,m:");
    35. scanf("%d%d",&n,&m);
    36. jose(n,m);
    37. }