歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux C寫報數游戲

題目:輸入兩個正整數 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.  
  50. [www.linuxidc.com @test baoshu]$ gcc BaoShu.c -o BaoShu -Wall 
  51. [www.linuxidc.com @test baoshu]$ ./BaoShu   
  52.  
  53. 輸入人數,小於零退出:9 
  54.  
  55. 輸入報到數:5 
  56. 5出隊 
  57. 1出隊 
  58. 7出隊 
  59. 4出隊 
  60. 3出隊 
  61. 6出隊 
  62. 9出隊 
  63. 2出隊 
  64. 幸存者是8 
  65. [www.linuxidc.com @test baoshu]$   
Copyright © Linux教程網 All Rights Reserved