| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
有N个人围成一圈,(假设的编号沿顺时针方向依次为1到N),编程序, 
使用数组来存放数据(人员编号),而后从1号人员开始数起(沿顺时针方向). 当数到M 时(M>1由用户输入),该号人员被"淘汰出局";接着仍沿着顺时针方向从淘汰者的下一人员重新从1开始数起,数到M后,淘汰第二个人;如此继续,直到最后剩下一人为止。请输出被"淘汰"的人的编号,及最后剩下一个人的编号。
另外一种指针代码: - #include <stdio.h>
 
  
- void game(int arr[], int *res, int N, int M){
 
 -     for(int i = 0, m = 1, n = 0;;i++, i %= N){
 
 -         if(!(arr[i])) continue;
 
 -         else{
 
 -             if(m == M){
 
 -                 *res++ = arr[i]; // 用指针赋值
 
 -                 arr[i] = m = 0;
 
 -                 n++;
 
 -             }
 
 -             m++;
 
 -         }
 
 -         if(n == N) break;
 
 -     }
 
 - }
 
  
- int main()
 
 - {
 
 -     int N, M;
 
 -     scanf("%d%d", &N, &M);
 
 -     int arr[N], res[N];
 
 -     for(int i = 0; i < N; i++) arr[i] = i+1;
 
 -     for(size_t i = 0; i < N; i++) printf("%d ", arr[i]); printf("\n");
 
 -     game(arr, res, N, M);
 
 -     for(size_t i = 0; i < N-1; i++) printf("%d ", res[i]);
 
 -     printf("\n%d", res[N-1]);
 
 -     return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |