歡迎來到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.   int i=0,num=1,die=0,front,rear,temp=0; 
  11.   while(num!=0) 
  12.   { 
  13.     printf("\n輸入人數,小於零退出:"); 
  14.     scanf("%d",&num); 
  15.     printf("\n輸入報到數:"); 
  16.     scanf("%d",&die); 
  17.     int *cycle=(int *)malloc((num+1)*sizeof(int)); 
  18.     for(i=0;i<=num;i++) 
  19.     { 
  20.       cycle[i]=i; 
  21.     } 
  22.     front=1; 
  23.     rear=num; 
  24.     i=1; 
  25.     while(front!=rear) 
  26.     { 
  27.       temp=(rear+1)%(num+1); 
  28.       cycle[temp]=cycle[front]; 
  29.       front=(front+1)%(num+1); 
  30.       if(i==die) 
  31.       { 
  32.         i=1; 
  33.         printf("%d出隊\n",cycle[temp]); 
  34.       } 
  35.       else 
  36.       { 
  37.         i++; 
  38.         rear=(rear+1)%(num+1); 
  39.         cycle[rear]=cycle[temp]; 
  40.       } 
  41.     } 
  42.     printf("幸存者是%d\n",cycle[front]); 
  43.     free(cycle); 
  44.     num=0; 
  45.   } 
  46.   return 0; 
  47. }   
  48.  
  49. [www.linuxidc.com @test baoshu]$ gcc BaoShu.c -o BaoShu -Wall 
  50. [www.linuxidc.com @test baoshu]$ ./BaoShu   
  51.  
  52. 輸入人數,小於零退出:9 
  53.  
  54. 輸入報到數:5 
  55. 5出隊 
  56. 1出隊 
  57. 7出隊 
  58. 4出隊 
  59. 3出隊 
  60. 6出隊 
  61. 9出隊 
  62. 2出隊 
  63. 幸存者是8 
  64. [www.linuxidc.com @test baoshu]$   
Copyright © Linux教程網 All Rights Reserved