顺序表求解约瑟夫问题

  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. }