歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux C寫報數游戲

Linux C寫報數游戲

日期:2017/3/1 10:08:12   编辑:Linux編程

題目:輸入兩個正整數 n 和 m( (1<m<n<=50)),有 n 個人圍成一圈,按順序從 1 到 n 編號。從第一個人開始報數,報數 m 的人退出圈子,下一個人從 1 開始重新報數,報數 m 的人退出圈子。如此循環,直到留下最後一個人。請按退出順序輸出退出圈子的人的編號,以及最後一個人的編號。

  1. [www.linuxidc.com @test baoshu]$ more BaoShu.c
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. /*********************************************************************
  5. *以循環隊列的數據結構實現
  6. *時間復雜度T(n)
  7. *采用循環隊列數據結構,使得每次對數組的訪問次數減少到最少
  8. **********************************************************************/
  9. int main(void)
  10. {
  11. int i=0,num=1,die=0,front,rear,temp=0;
  12. while(num!=0)
  13. {
  14. printf("\n輸入人數,小於零退出:");
  15. scanf("%d",&num);
  16. printf("\n輸入報到數:");
  17. scanf("%d",&die);
  18. int *cycle=(int *)malloc((num+1)*sizeof(int));
  19. for(i=0;i<=num;i++)
  20. {
  21. cycle[i]=i;
  22. }
  23. front=1;
  24. rear=num;
  25. i=1;
  26. while(front!=rear)
  27. {
  28. temp=(rear+1)%(num+1);
  29. cycle[temp]=cycle[front];
  30. front=(front+1)%(num+1);
  31. if(i==die)
  32. {
  33. i=1;
  34. printf("%d出隊\n",cycle[temp]);
  35. }
  36. else
  37. {
  38. i++;
  39. rear=(rear+1)%(num+1);
  40. cycle[rear]=cycle[temp];
  41. }
  42. }
  43. printf("幸存者是%d\n",cycle[front]);
  44. free(cycle);
  45. num=0;
  46. }
  47. return 0;
  48. }
  49. [www.linuxidc.com @test baoshu]$ gcc BaoShu.c -o BaoShu -Wall
  50. [www.linuxidc.com @test baoshu]$ ./BaoShu
  51. 輸入人數,小於零退出:9
  52. 輸入報到數:5
  53. 5出隊
  54. 1出隊
  55. 7出隊
  56. 4出隊
  57. 3出隊
  58. 6出隊
  59. 9出隊
  60. 2出隊
  61. 幸存者是8
  62. [www.linuxidc.com @test baoshu]$
Copyright © Linux教程網 All Rights Reserved